Автоматическое продвижение типов в Java - PullRequest
0 голосов
/ 12 июня 2018

Я понимаю, что операнды автоматически преобразуются в int, и нам нужно снова преобразовать выражение в байт.А для преобразования байтов 24 бита усекаются и оцениваются только 8 бит.Но я не могу понять этот вывод -56.Конечное значение e равно 200, и его преобразование в двоичном виде дает 11001000. Как получается вывод -56?

 public class ByteIntAutomaticPromotionInExpressions {
        public static void main(String[] args) {
            byte e = 50;
            e = (byte)(e *2);
            System.out.println(e);
            e *= 2;
            System.out.println(e);


    }
}

ВЫХОД:

100
-56

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

8 бит, 2 ^ 8 = 256 в этом случае 200-256 = -56

0 голосов
/ 12 июня 2018

Как вы можете видеть здесь:

byte: тип данных байта представляет собой 8-разрядное целое число со знаком, состоящее из двух чисел со знаком.Он имеет минимальное значение -128 и максимальное значение 127 (включительно).

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

Если тип данных был без знака, 11001000 будет 200 в десятичном виде.Но поскольку он подписан, вы рассматриваете его как отрицательное двоичное число, которое является - (инвертированные биты +1) => - (0110111 + 1) = - (0111000) = -56

https://www.allaboutcircuits.com/textbook/digital/chpt-2/negative-binary-numbers/

...