java - Behavior of bitwise xor using binary literals -
i'm curious know happens on bitwise comparison using binary literals. came across following thing:
byte b1 = (new byte("1")).bytevalue(); // check bit representation system.out.println(string.format("%8s", integer.tobinarystring(b1 & 0xff)).replace(' ', '0')); // output: 00000001 system.out.println(b1 ^ 0b00000001); // output: 0
so behaves expected, xor
comparison equals 0
. when trying same negative number won't work:
byte b2 = (new byte("-1")).bytevalue(); // check bit representation system.out.println(string.format("%8s", integer.tobinarystring(b2 & 0xff)).replace(' ', '0')); // output: 11111111 system.out.println(b2 ^ 0b11111111); // output: -256
i have expected last xor
comparison equals 0
. case if explicit cast of binary literal byte
:
byte b2 = (new byte("-1")).bytevalue(); // check bit representation system.out.println(string.format("%8s", integer.tobinarystring(b2 & 0xff)).replace(' ', '0')); // output: 11111111 system.out.println(b2 ^ (byte)0b11111111); // output: 0
for me looks before xor
comparison both b1
, 0b11111111
have same bit representation if casted int
(or else) xor
should still equal 0
. how come result of -256
11111111 11111111 11111111 00000000
in binary representation? why have explicit cast byte
in order obtain 0
?
when use b1 ^ 0b11111111
xor
between byte int byte
8 bit variable while int
32 bit number. so, did is: b1 ^ 0b(00000000 00000000 00000000 11111111)
when use xor
between byte
(with additional 1s before use int. 1s because negetive number. if positive 0s) , int
result integer , in case, -256.
when cast integer byte
using xor
between 2 bytes , result byte.
Comments
Post a Comment