Справка по длинным номерам Java - PullRequest
1 голос
/ 17 апреля 2011

Итак, в начале моего кода я объявил переменную private long counter; И когда я пытаюсь дать ему действительно длинное число, которое выдает ошибку, я пытаюсь сделать это counter = 1111111111111111; Это 16 "1", и я продолжаю получать ошибку " Литерал 1111111111111111 типа int находится вне диапазона " Что я делаю не так?

Ответы [ 3 ]

3 голосов
/ 17 апреля 2011

Попробуй так:

counter = 1111111111111111l;

Обратите внимание, что последним символом является буква «L» (строчная, конечно), а не номер один. Вот более понятный пример:

counter = 2222222222222222L;

Как уже отмечали другие, заглавная буква "L" также работает и гораздо более понятна. Все целочисленные литералы в Java интерпретируются как ints, если только вы не добавили к ним суффикс 'L' (или 'l'), чтобы сказать компилятору интерпретировать его как long.

Аналогичная ситуация происходит с литеральными числами с плавающей точкой, которые по умолчанию интерпретируются как doubles, если только вы не добавите к суффиксу символ 'f', чтобы сказать компилятору интерпретировать его как float. Как в:

double num1 = 1.0;  //1.0 is treated as a literal double
float num2 = 1.0;   //1.0 is still treated as a literal double; the compiler may complain about loss of precision
float num3 = 1.0f;  //1.0 is treated as a float, and the compiler is happy 
1 голос
/ 17 апреля 2011

По умолчанию компилятор java читает любое число как целое число.11111111111 явно находится вне диапазона целого числа.Введите counter=11111111111L;, чтобы компилятор правильно прочитал значение.

0 голосов
/ 17 апреля 2011

Проблема в том, что по умолчанию числовые литералы равны int s. Чтобы сделать числовой литерал длинным, вы должны закончить его буквенным символом l (строчная буква L). Итак:

long counter = 1111111111111111l;

В C # вы также можете использовать прописные буквы L. Я не уверен насчет Java.

...