位运算
程序员文章站
2022-05-02 19:09:45
...
基本位运算包含6种运算符
& 按位与
| 按位或
^ 按位异或
~ 取反
<< 左移
>> 右移(>>>无符号右移)
& 按位与运算
&运算符为双目运算符,参与运算的数以补码方式
相同位的两个数字都为1,则为1;若有一个不为1,则为0
3 & 5 = 1
0000 0011
0000 0101
0000 0001
| 按位或运算
|运算符为双目运算符,参与运算的数以补码方式
相同位只要一个为1即为1;否则为0
3 | 5 = 7
0000 0011
0000 0101
0000 0111
^ 按位异或运算
^运算符为双目运算符,参与运算的数以补码方式
相同位不同则为1,相同则为0
3 ^ 5 = 6
0000 0011
0000 0101
0000 0110
~ 取反运算
^运算符为单目运算符,参与运算的数以补码方式
二进制每一位取反,0变1,1变0
~9 = -10:
二进制: 0000 1001
补码: 0000 1001
取反: 1111 0110
转原码:
取反: 1000 1001
末位加1:1000 1010
<< 左移运算
^运算符为双目运算符,参与运算的数以补码方式
二进制左移若干位,高位丢弃,低位补0
在二进制数后添一个0就相当于该数乘以2
3<<2 = 12
0000 0011
0000 1100
>> 右移运算
^运算符为双目运算符,参与运算的数以补码方式
二进制右移若干位(符号位也需要移动),低位丢弃;左边移出的空位或者一律补0,或者补符号位,这由不同的机器而定(一般对于无符号类型强制补0,对于有符号类型续补符号位)
最大公约数的二进制算法用除以2
5>>2 = 1
0000 0101
0000 0001
下一篇: Swing Explorer 1.0发布