Java 长值的十进制到二进制转换

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.

我使用下面的方法将十进制转换为二进制。 该方法需要一个长类型作为参数,并返回二进制等价物。 但如果像“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;
    }

未测试的代码,考虑符号和二进制表示:

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