2014-10-15 3 views
2

Я пытаюсь назначить 4294967295 длинным. То есть (2^32-1) Java (NetBeans) дает следующее сообщение об ошибке «целое число слишком большое»java не может обрабатывать 32-разрядное число

на самом деле я пытался выяснить, наибольшее число, что INT может обрабатывать (сделал это вручную) и обнаружил, что это 2147483647 (конечно, очевидно, что это 2^31-1)

Но удивительно, что я обнаружил, что даже длинный тип не может обрабатывать число, большее этого. Разве нет никакой разницы между int и long? Java doc говорит long is 64 bit

Я что-то упустил?

ответ

11

Проблема в том, что вы используете 4294967295 как литерал int - но это недействительное значение int. Вы хотите, чтобы это был литерал long, поэтому вам нужно добавить суффикс L. Это хорошо:

long x = 4294967295L; 

От JLS section 3.10.1:

Целочисленный литерал имеет тип долго, если она суффиксом с ASCII буквой L или L (ELL); в противном случае это тип int (п. 4.2.1).

3

Используйте нижний l, чтобы показать компилятору, что это длинная стоимость.

long l = 4294967295l ; 
0

Java говорит .... INT: По умолчанию, тип INT данных представляет собой 32-разрядное знаковое двоичное дополнение целое число, которое имеет минимальное значение -2^31 и максимальное значение 2^31-1. В Java SE 8 и более поздних версиях, , вы можете использовать тип данных int для представления 32-разрядного целого числа без знака, которое имеет минимальное значение 0 и максимальное значение 2^32-1. Используйте класс Integer для использования типа данных int в виде целых чисел без знака. Дополнительную информацию см. В разделе «Классы номеров». Статические методы, такие как compareUnsigned, divideUnsigned и т. Д., Были добавлены в класс Integer для поддержки арифметических операций для целых чисел без знака.

so 2^32-1 = 4294967295

Смежные вопросы