Java 长值的十进制到二进制转换
我使用下面的方法将十进制转换为二进制。 该方法需要一个长类型作为参数,并返回二进制等价物。 但如果像“2147483647L”这样的值作为参数传递,它将返回一些垃圾值。 在这个代码片段中我到底遗漏了什么Java 长值的十进制到二进制转换,java,Java,我使用下面的方法将十进制转换为二进制。 该方法需要一个长类型作为参数,并返回二进制等价物。 但如果像“2147483647L”这样的值作为参数传递,它将返回一些垃圾值。 在这个代码片段中我到底遗漏了什么 public long calculateBinary(long N){ long m=N, s=0, i=0; while(m>0) { long k=m%2; s=(long)((Math.
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;
}
未测试的代码,考虑符号和二进制表示:
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;
}
公共字符串计算二进制(长N){
布尔方向=(N>>63==0);
字符串结果=(方向?”:“-”;
用于(整数位=0;位<63;位++){
结果+=方向?((N>63):(1-((N>63));
}
返回结果;
}
如果说
long
已经被转换成二进制,这是不准确的,因为二进制数的计算表示和它们的有效值之间存在着巨大的差异,因为长变量的二进制表示不同于数字的有效数学二进制表示,如果数字r为负。如果实际返回的是一个long
,其十进制表示形式类似于另一个数字的二进制展开形式,那么很快就会通过long
的最大大小。在return语句中使用biginger或String!!!如果您试图手动创建numb的二进制表示形式呃,您应该返回一个字符串。N
已经是二进制的,您的代码没有正确地将十进制转换为二进制。不清楚您在问什么。@Khelwood:我甚至尝试使用api中的Long.tobinarysting(Long)方法返回字符串。但是当我试图将值解析为Long时,导致NumberFormatException