本文只记录了位运算部分。
进制
0x指的是十六进制的前缀
0b指的是二进制的前缀
0指的是八进制的前缀
example: 0x12 == 0b00010010 == 022 == 18
位运算
位运算符:
&
按位与运算符,两个位都为1时,结果才为1,否则为0.
exp:0b1010 & 0b1100 == 0b1000
|
按位或运算符,两个位中只要有一个为1时,结果就为1,否则为0.
exp:0b1010 | 0b1100 == 0b1110
^
按位异或运算符,两个位不同时为1时,结果为1,否则为0.
exp:0b1010 ^ 0b1100 == 0b0110
~
按位取反运算符,0变1,1变0.
exp:~0b1010 == 0b0101
<<
左移运算符,二进制位向左移动指定位数.
exp:0b1010 << 2 == 0b101000
>>
右移运算符,二进制位向右移动指定位数.
exp:0b1010 >> 2 == 0b0010
&=
按位与赋值运算符,将运算结果赋值给左边的变量.
exp:a = 0b1010; a &= 0b1100; a == 0b1000
|=
按位或赋值运算符,将运算结果赋值给左边的变量.
exp:a = 0b1010; a |= 0b1100; a == 0b1110
^=
按位异或赋值运算符,将运算结果赋值给左边的变量.
exp:a = 0b1010; a ^= 0b1100; a == 0b0110
<<=
左移赋值运算符,将运算结果赋值给左边的变量.
exp:a = 0b1010; a <<= 2; a == 0b101000
>>=
右移赋值运算符,将运算结果赋值给左边的变量.
exp:a = 0b1010; a >>= 2; a == 0b0010
位运算与逻辑运算的区别
位运算符是对二进制位进行操作,而逻辑运算符是对逻辑值进行操作。
在运算a & b
时, a和b都要进行计算,无论a是否为假,都要计算b,然后进行与运算。
在运算a && b
时, 只要a为假,则不计算b,直接返回假。
其它运算符与&
和&&
类似。