ParseLong NumberFormat异常错误

时间:2017-02-22 09:27:56

标签: java algorithm

import java.util.*;
public class HelloWorld {
    public static void main(String[] args) {
        String s = "110101001011101110001111100110001010100001101011101010000011011011001011101111001100000011011110011";
        long sum = Long.parseLong(s, 2);
        System.out.println(sum);
    }
}

为什么我会获得NumberFormatException

4 个答案:

答案 0 :(得分:1)

长维是64位,所以最大二进制字符串不能超过64长度(你有100)。您可以将数据拆分为多个64位部分,并收集Long值列表。

或者您可以使用BigInteger:

BigInteger val = new BigInteger("110101001011101110001111100110001010100001101011101010000011011011001011101111001100000011011110011", 2);
System.out.println(val.toString()); // prints '526700554598729746900966573811'

答案 1 :(得分:0)

只需查看附页,了解特定类型的最大值和最小值。像有人建议的那样尝试使用BigInteger。

Java basic data types

答案 2 :(得分:0)

您收到NumberFormatException因为数字110101001011101110001111100110001010100001101011101010000011011011001011101111001100000011011110011太大而无法存储在Java中的long中。

作为参考,Java中long的最大值为9223372036854775807(十进制)。二进制,这是111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111,小于:

1101 0100 1011 1011 1000 1111 1001 1000 1010 1000 0110 1011 1010 1000 0011 0110 1100 1011 1011 1100 1100 0000 1101 1110 011.

答案 3 :(得分:-1)

你的字符串太长了;-) 查看Long.MAX_VALUE