0
Пожалуйста, объясните, почему выходПожалуйста, объясните этот вывод программы Java
byte c = (byte) (-512);
System.out.print(c);
является 0
.
Пожалуйста, объясните, почему выходПожалуйста, объясните этот вывод программы Java
byte c = (byte) (-512);
System.out.print(c);
является 0
.
Диапазон байтов в Java - -128 to 127
. Поскольку -512 не находится в диапазоне, компилятор будет запрашивать явное приведение типов. Следовательно, вы должны отдать -512 (целое число) в байт. Что происходит, когда программа работает, так это то, что JVM просто удаляет верхние 24 бита, чтобы поместить -512 в 8 бит.
-512 = 11111111111111110000001000000000 (int)
(byte) -512 = 00000000 (byte) //truncated the upper 24 bits// = 0
Что вас беспокоит? Вы знаете, что такое [диапазон байтов] (https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html) и [целочисленное переполнение] (https://en.wikipedia.org/вики/Integer_overflow)? – Pshemo
Возможный дубликат [Как Java обрабатывает целое число с переполнением и переполнением и как вы его проверите?] (Http://stackoverflow.com/questions/3001836/how-does-java-handle-integer-underflow-and-overflows -and-how-would-you-check-fo) – byako
Да, я делаю ..its -128 до 127, но почему вывод 0 –