2015-02-22 7 views
0

Пожалуйста, проверьте следующее ..Java примитивный тип данных «короткий» показывает 0

short t = (short)23252525; 
System.out.println(t); 

Над напечатает выводится как «-12755» Я понимаю, что «23252525» слишком большой, чтобы поместиться в короткий поэтому переполняется и иногда показывает отрицательный. (- 32 768 до 32 767)

Теперь, пожалуйста, взгляните на это.

int j = 65536; 
for (int i=0;i<10;i++) 
    System.out.println((short)(i*j)); 

Почему выше всегда печатать 0s?

Спасибо,

Sanone

+2

Подсказка: что такое 'j' как' короткий'? –

ответ

0

Потому что кратно 65536, который перетекает в 0.

Так как указал вам, диапазон коротких является -32768 до 32767,

so when you have short as 32768, it overflows and goes to –32768, 
if your short goes to 32769, it will print -32767. 

Аналогичным образом, если ваш шорт идет до 65536, он возвращается к 0 и, следовательно, вы видите 0.

5

65536 является 0000000000000001 0000000000000000. Кастинг его short листов нижних 16 бит, все из которых равен 0. Если умножить 65536 положительных целых чисел, вы получаете большие целые числа, нижние 16 бита по-прежнему все 0.

0*j 00000000000000000 0000000000000000 
1*j 00000000000000001 0000000000000000 
2*j 00000000000000010 0000000000000000 
3*j 00000000000000011 0000000000000000 
4*j 00000000000000100 0000000000000000 
5*j 00000000000000101 0000000000000000 
6*j 00000000000000110 0000000000000000 
7*j 00000000000000111 0000000000000000 
8*j 00000000000001000 0000000000000000 
9*j 00000000000001001 0000000000000000 

Поэтому я * J остается 0 при нажатии на короткий.

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