Java-байт в двоичное преобразование

Основываясь на моих утверждениях ниже, у меня есть несколько вопросов. Пожалуйста, объясни.

Q1. Почему выходные данные одинаковы для элементов 2 и 4. Я думаю, это потому, что байт 128 равен байту -128

Q2. Почему выходные данные для элементов 2 и 4 дополняются цифрами 1 слева, где выходные данные должны быть именно этими 10000000. Я думаю.

Q3. В чем разница между выходами 2 и 3, хотя последние 8 бит выглядят одинаково.

1. System.out.println("1==>"+Integer.toBinaryString((byte)127));
2. System.out.println("2==>"+Integer.toBinaryString((byte)128));
3. System.out.println("3==>"+Integer.toBinaryString(128));
4. System.out.println("4==>"+Integer.toBinaryString((byte)-128));

выход:

1==>1111111

2==>11111111111111111111111110000000

3==>10000000

4==>11111111111111111111111110000000

1 ответ

Решение

byte в Java на самом деле это 8-разрядное целое число со знаком. Он может представлять только числа от -128 до 127.

Q1. 128 - это переполнение. Это становится -128.

Q2. Оба это отрицательные числа. Для отрицательных чисел метод возвращает "аргумент плюс 2 ^ 32". Это приводит к большому количеству ведущих единиц. Для положительных чисел вывод просто опускает ведущие 0,

Q3. В примере 3 вы не используете byte, Ты используешь int, Это означает, что вы можете представить 128, это не переполнение.

Другие вопросы по тегам