位异或运算(^):两个数转为二进制,然后从高位开始比较,如果相同则为0,不相同则为1。
比如:3^8.
3转为二进制为:0000 0011
8转为二进制为:0000 1000,
从高位开始比较得到的是: 0000 1011然后二进制转为十进制,就是11
位与运算符(&):两个数都转为二进制,然后从高位开始比较,如果两个数都为1则为1,否则为0。
比如:129&128.
129转为二进制为:1000 0001
128转为二进制为:1000 0000。
从高位开始比较得到,得到1000 0000,即128.
位或运算符(|):两个数都转为二进制,然后从高位开始比较,两个数只要有一个为1则为1,否则就为0。
比如:129|128.
129转为二进制为:1000 0001,
128转为二进制为:1000 0000。
从高位开始比较得到,得到10000001,即129.
位非运算符(~):如果位为0,结果是1,如果位为1,结果是0.
比如:~37
在Java中,所有数据的表示方法都是以补码的形式表示,如果没有特殊说明,Java中的数据类型默认是int,int数据类型的长度是8位,一位是四个字节,就是32字节,32bit.
8转为二进制是100101.
补码后为: 00000000 00000000 00000000 00100101
取反后为: 11111111 11111111 11111111 11011010
因为高位是1,所以原码为负数,负数的补码是其绝对值的原码取反,末尾再加1。
因此,我们可将这个二进制数的补码进行还原: 首先,末尾减1得反码:11111111 11111111 11111111 11011001 其次,将各位取反得原码:
00000000 00000000 00000000 00100110,此时二进制转原码为38
所以~37 = -38.
版权归原作者 一笼蟹黄包 所有, 如有侵权,请联系我们删除。