将2 ^ 63大十进制转换为二进制

问题描述

| 我需要将大的十进制转换为二进制,我该怎么做?有问题的十进制是3324679375210329505     

解决方法

        http://www.wikihow.com/Convert-from-Decimal-to-Binary     ,        怎么样:
String binary = Long.toString(3324679375210329505L,2);
    ,        您可能想去
BigDecimal
。   BigDecimal由任意   精度整数非标度值和   32位整数小数位.BigDecimal类提供算术小数位的运算   操作,舍入,比较,哈希和格式转换。 toString()方法   提供BigDecimal的规范表示。
new BigDecimal(\"3324679375210329505\").toString(2);
    ,        我会使用堆栈!检查您的十进制数字是偶数还是奇数,是否将0偶数压入堆栈,如果其奇数则压1压入堆栈。然后,一旦十进制数字达到1,您就可以从堆栈中弹出每个值并打印每个值。 这是一个效率很低的代码块,仅供参考。您可能必须使用long而不是整数。
import java.util.Stack;

public class DecBinConverter {

Stack<Integer> binary;

public DecBinConverter()
{
    binary = new Stack<Integer>();
}

public int dec_Bin(int dec)
{
    if(dec == 1)
    {
        System.out.print(1);
        return 0;
    }
    if(dec == 0)
    {
        System.out.print(0);
        return 0;
    }
        if((dec%2) == 0)
        {
            binary.push(0);
            dec = dec/2;
        }
        else
        {
            binary.push(1);
            dec = dec/2;
        }   
        while(dec != 1)
        {

            if((dec%2) == 0)
            {
                binary.push(0);
                dec = dec/2;

            }
            else
            {
                binary.push(1);
                dec = dec/2;
            }   
        }
        if((dec%2) == 0)
        {
            binary.push(0);
            dec = dec/2;
        }
        else
        {
            binary.push(1);
            dec = dec/2;

        }
        int x = binary.size();
        for(int i = 0; i < x; i++)
        {
            System.out.print(binary.pop());
        }
        return 0;

}

}
    ,        如果要快速处理某些东西(与
Long.toString(n,2)
相比快50%以上,比
BigInteger.toString(2)
快150-400%),并且要处理与内置函数相同的负数,请尝试以下操作:
static String toBinary (long n) {
    int neg = n < 0 ? 1 : 0;
    if(n < 0) n = -n;
    int pos = 0;
    boolean[] a = new boolean[64];
    do {
        a[pos++] = n % 2 == 1;
    } while ((n >>>= 1) != 0);
    char[] c = new char[pos + neg];
    if(neg > 0) c[0] = \'-\';
    for (int i = 0; i < pos; i++) {
        c[pos - i - 1 + neg] = a[i] ? \'1\' : \'0\';
    }
    return new String(c);
}
如果要want7的实际二进制补码二进制表示形式(前导1或0):
static String toBinaryTC (long n) {
    char[] c = new char[64];
    for(int i = 63; i >= 0; i--,n >>>= 1) {
        c[i] = n % 2 != 0 ? \'1\' : \'0\';          
    }
    return new String(c);        
}
    ,        毫无意义,但这是C语言的解决方案:
void to_binary(unsigned long long n)
{
    char str[65],*ptr = str + 1;
    str[0] = \'\\n\';
    do{
        *ptr++ = \'0\' + (n&1);
    } while(n >>= 1);
    while(ptr > str)
        putc(*--ptr,stdout);
}
对于该示例,它将输出:
    10111000100011101000100100011011011111011110101011010110100001
编辑:而且,如果您不介意以零开头。
void to_binary(unsigned long long n)
{
    do{ putc(\'0\' + (n>>63),stdout); } while(n <<= 1);
}
    

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...