位运算符

一. 位运算符 &、|、^、~、>>、<<

使用位运算符时首先将要进行运算的数转换为二进制,而后对二进制数值中的每一位进行计算,最后将得出的二进制数转换为相应类型的数值结果优化

1. & 与运算符

与运算规则spa

0 & 0 = 0
0 & 1 = 0
1 & 1 = 1

与门逻辑电路,输入端均为高电平(逻辑1)时,输出才为高电平,不然为低电平(逻辑0)3d

例:code

3 & 5

转换为二进制blog

0000 0011
&
0000 0101

从最低位到最高位一一对应进行运算,得出结果get

0000 0001

所以it

3 & 5 = 1

2. | 或运算符

或运算规则二进制

0 | 0 = 0
0 | 1 = 1
1 | 1 = 1

或门逻辑电路,输入端A或输入端B为高电平(逻辑1)时,输出为高电平(逻辑1)im

例:db

4 | 7

转换为二进制

0000 0100
|
0000 0111

从最低位到最高位一一对应进行运算,得出结果

0000 0111

所以

4 | 7 = 7

3. ^ 异或运算符

异或运算规则,位数值相同则为0,不一样则为1

0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 1 = 0

异或门逻辑电路

例:

5 ^ 9

转换为二进制

0000 0101
^
0000 1001

从最低位到最高位一一对应进行运算,得出结果

0000 1100

所以

5 ^ 9 = 12

4. ~ 取反运算符

取反运算规则,对操做数的每一位进行取反操做,0取反为1,1取反为0

~0 = 1
~1 = 0

例:

~7

转换为二进制

0000 0111 ~

对每一位进行取反运算,得出结果

1111 1000

5. << 左移运算符

运算规则:将操做数的各二进制位左移若干,右补0,左溢出位舍弃

15转换为二进制00001111,左移两位

00001111 << 2

结果为

00111100

在数字没有溢出的前提下,对于正数负数,左移一位都至关于乘以2的1次方,左移n位就至关于乘以2的n次方。由于位运算比x运算快,能够使用位运算对代码进行优化

6. >>> 右移运算符

将二进制位向右移若干,右溢出位舍弃,高位补0

例如 16,二进制为00010000,右移两位

00010000 >>> 2

运算结果为 00000100,即16/(2*2) = 4

7. >> 带符号的右移运算符

对于正数的运算>>与>>>效果是同样的,右移高位补0。可是对于负数,>> 是在高位补1

例16与-16

00010000 >> 2 = 00000100
11101111 >> 2 = 11111011
相关文章
相关标签/搜索