为什么它会为很长的二进制字符串返回负值?

时间:2015-01-16 03:50:21

标签: java

public long bin_to_dec() {
    int leng = a.length();

    for (int i = 0, j = (leng - 1); i < leng; i++, j--) {

        int number = Character.getNumericValue(a.charAt(j));
        result = result + (number * ((long) Math.pow(2, i)));

    }
    return result;
}  

此代码将二进制字符串作为参数并返回其十进制值 但对于长串,即

(111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111) 

它返回-28。
为什么内存超出范围? 或者我的代码是不正确的?

1 个答案:

答案 0 :(得分:0)

你可能超出了int的长度。 java中的整数是32位,二进制字符串是91位。

尝试使用类似BigInteger的内容,但不会溢出。事实上,BigInteger有一个内置的方法:

BigInteger result = new BigInteger(a, 2);