Java 将大的2^63十进制数转换为二进制数
我需要把一个大的十进制数转换成二进制数,我该怎么做呢?问题的小数点是您可能想要的33246793752109505 BigDecimal由任意 精度整数未标度值和 32位整数比例。BigDecimal类提供算术、比例运算 操作、舍入、比较、哈希和格式转换。方法 提供BigDecimal的规范表示形式 那么: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(
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/LINUXdc
工具在命令行中进行转换。@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;
}
}