2017-02-22 3 views
-4
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?ParseLong NumberFormat error error

+0

Потому что это Loooooooooooooooooooooooooooong –

+0

Ваша строка '' 'легко выходит за рамки того, что может хранить длинный тип данных! –

+1

«long» - 64 бит. Вы указываете 99 бит. '99> 64'. – khelwood

ответ

-1

Вашей строка слишком долго ;-) Проверьте Long.MAX_VALUE

1

Long размера составляет 64 бит, поэтому максимальная двоичная строка не может быть больше, чем 64 длиной (у вас есть 100). Вы можете разделить свои данные на несколько 64-битных частей и собрать список значений Long.

Или вы можете использовать BigInteger:

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

Просто посмотрите на присоединенной странице и посмотреть, что максимальное и минимальное значение для конкретных типов. Попробуйте с BigInteger, как кто-то предложил.

Java basic data types

0

Вы получаете NumberFormatException, потому что число 110101001011101110001111100110001010100001101011101010000011011011001011101111001100000011011110011 слишком велико, чтобы быть сохранены в long в Java.

Для справки, максимальное значение для long в Java равно 9223372036854775807 в десятичной системе. В двоичной форме это 111 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.