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, это не переполнение.