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

时间:2016-02-28 19:57:47

标签: java

我使用下面的方法将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;
    }

1 个答案:

答案 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已经转换为二进制是不准确的,因为二进制数的计算表示与它们的有效值之间存在巨大差异,因为长变量的二进制表示不同于数字为负数的有效数学二进制表示。