Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将大的2^63十进制数转换为二进制数_Java_Binary_Decimal_Largenumber - Fatal编程技术网

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

Java 将大的2^63十进制数转换为二进制数,java,binary,decimal,largenumber,Java,Binary,Decimal,Largenumber,我需要把一个大的十进制数转换成二进制数,我该怎么做呢?问题的小数点是您可能想要的33246793752109505 BigDecimal由任意 精度整数未标度值和 32位整数比例。BigDecimal类提供算术、比例运算 操作、舍入、比较、哈希和格式转换。方法 提供BigDecimal的规范表示形式 那么: String binary = Long.toString(3324679375210329505L, 2); 有点毫无意义,但这里有一个C语言的解决方案: void to_binary(

我需要把一个大的十进制数转换成二进制数,我该怎么做呢?问题的小数点是您可能想要的33246793752109505

BigDecimal由任意 精度整数未标度值和 32位整数比例。BigDecimal类提供算术、比例运算 操作、舍入、比较、哈希和格式转换。方法 提供BigDecimal的规范表示形式

那么:

String binary = Long.toString(3324679375210329505L, 2);

有点毫无意义,但这里有一个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);
}
void to_二进制(无符号长n)
{

执行{putc('0'+(n>>63),stdout);}while(n如果您想要快速的东西(比
Long.toString(n,2)
快50%以上,比
biginger.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);
}

我会使用堆栈!检查您的十进制数是偶数还是奇数,如果偶数将0推到堆栈中,如果奇数将1推到堆栈中。然后,一旦您的十进制数达到1,您可以从堆栈中弹出每个值并打印每个值

这是一个非常低效的代码块供参考。您可能需要使用long而不是integer

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;

}

}
import java.util.Stack;
公共类二进制转换器{
堆栈二进制;
公共数据转换器()
{
二进制=新堆栈();
}
公共国际数据中心(国际数据中心)
{
如果(dec==1)
{
系统输出打印(1);
返回0;
}
如果(dec==0)
{
系统输出打印(0);
返回0;
}
如果((十二月%2)==0)
{
二进制推送(0);
dec=dec/2;
}
其他的
{
二进制推送(1);
dec=dec/2;
}   
而(12月=1日)
{
如果((十二月%2)==0)
{
二进制推送(0);
dec=dec/2;
}
其他的
{
二进制推送(1);
dec=dec/2;
}   
}
如果((十二月%2)==0)
{
二进制推送(0);
dec=dec/2;
}
其他的
{
二进制推送(1);
dec=dec/2;
}
int x=binary.size();
对于(int i=0;i
如果你必须自己做,而不是使用库函数,我最近将我的stackoverflow答案修改为a。数字以5结尾,不会是2^任何东西。嗯,我需要找到“我为什么要学习二进制?”如果你只想转换一个数字,你可以使用古老的UNIX/LINUX
dc
工具在命令行中进行转换。@Stephen:我刚做了:
33246793775210329505 2 o p
给出
1011100010001110100011011111101011010110100001
@roadrunner:Your name I这太棒了。:D+1+1到@Paŭlo Ebermann-有很多其他的方法可以做到这一点。@Paulo:可能是因为你必须..C'mon!这不是一个合理的理由。如果有其他的方法,向下投票者必须对我的答案发表评论说。向下投票者的态度很差。这甚至不起作用!BigDecimal的toString不带参数。@roadrunner:BigDecimal没有采用基数的toString方法,BigInteger有。这有点合乎逻辑。现在添加decimal的转换:-)-1:在重新发明轮子和编写自己的代码之前,始终使用内置API。请参阅@roadrunner(正确)的答案。@Bohemian:“始终”即使它是一个简单的两行程序,而且内置的解决方案效率很低?我相信你也同意这是一种概括(不是说我一般不同意):)在我写这篇文章的时候,这个问题只有一个标签:“二进制”。考虑到缺乏上下文,我选择了一般的“如何理解算法”答:好的,但只限于数字的大小9223372036854775807@Bohemian-是的,但标题表明它可以容纳63位(因此不必担心符号)。
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);        
}
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;

}

}