2015-07-20 2 views
0

Пожалуйста, объясните, почему выходПожалуйста, объясните этот вывод программы Java

byte c = (byte) (-512); 
System.out.print(c); 

является 0.

+0

Что вас беспокоит? Вы знаете, что такое [диапазон байтов] (https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html) и [целочисленное переполнение] (https://en.wikipedia.org/вики/Integer_overflow)? – Pshemo

+0

Возможный дубликат [Как Java обрабатывает целое число с переполнением и переполнением и как вы его проверите?] (Http://stackoverflow.com/questions/3001836/how-does-java-handle-integer-underflow-and-overflows -and-how-would-you-check-fo) – byako

+0

Да, я делаю ..its -128 до 127, но почему вывод 0 –

ответ

1

Диапазон байтов в Java - -128 to 127. Поскольку -512 не находится в диапазоне, компилятор будет запрашивать явное приведение типов. Следовательно, вы должны отдать -512 (целое число) в байт. Что происходит, когда программа работает, так это то, что JVM просто удаляет верхние 24 бита, чтобы поместить -512 в 8 бит.

-512   = 11111111111111110000001000000000 (int) 
(byte) -512 =       00000000 (byte) //truncated the upper 24 bits// = 0 
Смежные вопросы