byte b = -0b0101^-0b0100;
System.out.println("Outputs "+b);
//Outputs 7
Почему этот выход 7 (0b111
), когда я ожидал 1 (0b001
)?XOR в Java с отрицательными байт
byte b = -0b0101^-0b0100;
System.out.println("Outputs "+b);
//Outputs 7
Почему этот выход 7 (0b111
), когда я ожидал 1 (0b001
)?XOR в Java с отрицательными байт
Отрицательные числа рассчитываются в соответствии с арифметикой «два дополнения».
-0b0101 = NOT(0000 0101) + 1 = 1111 1010 + 1 = 1111 1011
-0b0100 = NOT(0000 0100) + 1 = 1111 1011 + 1 = 1111 1100
Если вы XOR это вы получите:
0000 0111 = 7
Для представления отрицательных чисел в двоичной системе мы используем «дополнение до двух»
Это, как вы получите отрицательные двоичные числа в Java, проверить это ссылка: How are integers internally represented at a bit level in Java?
Тогда вы получите: -5 в двоичном виде 11111011 -4 в двоичном коде 11111100 -------- 00000111 = что 7. Это результат 7, надеюсь, что это поможет.