Java的按位操作相关问题不太理解,见图

img

img

好问题,我也想了很久,终于搞懂了。
首先,二进制数在内存中是以补码的形式存放的。int是4个字节,内存中占32位
也就是说。11111110在内存中是011111110存储的(符号位一定要加上,你这是正数,前面补0)
然后,~按位取反就是100000001(第一个是符号位),注意此时c现在在内存中是以补码形式存储的,那我现在要输出c,是输出它的原码
就要将补码转换为原码
减1后取反:111111111(符号位不变,也就是-11111111),输出就是-255了

你反过来把负255转一下不久明白了吗

是0b10000001才对吧
你这根本是个假问题
想知道到底是多少,你别按10进制输出,按2进制输出,不就得了