zl程序教程

您现在的位置是:首页 >  Java

当前栏目

java运算符 异或(^), 与(&),或(|),非(~)

2023-04-18 14:15:05 时间

位异或运算(^):两个数转为二进制,然后从高位开始比较,如果相同则为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.