Подтвердить что ты не робот

Почему byte b = (byte) 0xFF равен целому числу -1?

Почему byte b = (byte) 0xFF равно integer -1?

Пример:

int value = byte b = (byte) 0xFF;
System.out.println(value);

он напечатает -1?

4b9b3361

Ответ 1

Байты подписываются на Java. В двоичном 0x00 равен 0, 0x01 равно 1 и так далее, но все 1s (т.е. 0xFF) равно -1, 0xFE равно -2 и так далее. См. Два дополнения, которые являются используемым механизмом двоичного кодирования.

Ответ 2

  • b повышается до int при определении перегрузки system.out.println для вызова.

  • Все байты в Java подписаны.

  • Подписанный байт 0xff представляет значение -1. Это связано с тем, что Java использует два дополнения для представления подписанных значений. Подписанный байт 0xff представляет -1, потому что его старший бит равен 1 (поэтому он представляет отрицательное значение), а его значение -128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = -1.

Ответ 3

возможно, ваше замешательство возникает из-за того, что (byte)0xFF как-то равно (int)0xFFFFFFFF. Здесь происходит продвижение от более мелких к более крупным подписанным типам, заставляя меньшее значение быть расширением знака, посредством чего самый старший бит копируется ко всем новым битам продвинутого значения. беззнаковый тип не будет расширяться по знаку, они будут иметь нулевой размер, новые бит всегда будут равны нулю.

Если это поможет вам усвоить его, подумайте об этом таким образом, у каждого целого любого размера также есть некоторые "phantom" биты, которые слишком значительны для представления. они есть, просто не сохраняются в переменной. отрицательное число имеет эти биты отличные от нуля, а положительные числа имеют все нули для бит phantom, когда вы продвигаете меньшее значение к большему, те phantom биты становятся реальными битами.

Ответ 4

Если вы используете подписанный int, то 0xFF = -1 из-за 2-дополнения.

Эта статья wiki объясняет это хорошо, см. таблицу справа: http://en.wikipedia.org/wiki/Two%27s_complement

Ответ 5

Поскольку Java (и большинство языков) представляют отрицательные целочисленные значения, используя двухсоставную математику. В двухзначном дополнении 0xFF (11111111) представляет (в подписанном int) значение -1. ​​

Ответ 6

Это не просто Java, который выполняет 2 дополнения к математике. Таким образом, каждый микропроцессор и DSP, о которых я могу думать, делают математику. Таким образом, это означает, что каждый язык программирования представляет его.

Ответ 7

приведено по модулю

byte = 256 0xff = 255

255/256 → остаток 255

Итак, 255 - 256 = -1

Простая логика Приветствия