我使用下面的方法将Decimal转换为Binary。 该方法需要long类型作为参数并返回Binary等效项。 但是,如果像" 2147483647L"作为参数传递,它返回一些垃圾值。 我在这个代码片段中错过了什么?
public long calculateBinary(long N){
long m=N, s=0, i=0;
while(m>0)
{
long k=m%2;
s=(long)((Math.pow(10,i)*k)+s);
i++;
m=m/2;
}
return s;
}
答案 0 :(得分:0)
未经测试的代码,它考虑了符号和二进制表示:
public String calculateBinary(long N) {
boolean direction = (N >> 63 === 0);
String result = (direction ? "" : "-");
for (int bits = 0; bits < 63; bits++) {
result += direction ? ((N << (1 + bits)) >> 63) : (1 - ((N << (1 + bits)) >> 63));
}
return result;
}
说long
已经转换为二进制是不准确的,因为二进制数的计算表示与它们的有效值之间存在巨大差异,因为长变量的二进制表示不同于数字为负数的有效数学二进制表示。