如何解决将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);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。