Bitwise Operators ( &, |, ^, ~, <<, >> )
Bitwise operators modify variables considering the bit patterns that represent the values they store.
| operator | asm equivalent | description |
| & |
AND |
Bitwise AND 位与
|
| | |
OR |
Bitwise Inclusive OR 位或
|
| ^ |
XOR |
Bitwise Exclusive OR
异或,即
参与运算的位不同时其结果是1,否则结果为0 。即“相同为0,不同为1”
|
| ~ |
NOT |
Unary complement (bit inversion) 取反
|
| << |
SHL |
Shift Left 左移
|
| >> |
SHR |
Shift Right 右移
|
从右开始为0位:
7 6 5 4 3 2 1 0
位与:将某位置为0
位或:将某位置为1
4的二进制:0b'100'
将x的2位置为0,其它位保留不变.
int x=7; //0b'111'
x &=~4; //结果:0b'011'
位或:
将x的第2位置为1,其它位保留不变.
int x= 9; //0b'1001'
x |= 4; //0b'1101'
There is an established order with the priority of each operator, the priority order is as follows:
| Level | Operator | Description | Grouping |
| 1 |
:: |
scope |
Left-to-right |
| 2 |
() [] . -> ++ --
dynamic_cast static_cast reinterpret_cast const_cast typeid |
postfix |
Left-to-right |
| 3 |
++ -- ~ ! sizeof new delete |
unary (prefix) |
Right-to-left |
| * & |
indirection and reference (pointers) |
| + - |
unary sign operator |
| 4 |
(type) |
type casting |
Right-to-left |
| 5 |
.* ->* |
pointer-to-member |
Left-to-right |
| 6 |
* / % |
multiplicative |
Left-to-right |
| 7 |
+ - |
additive |
Left-to-right |
| 8 |
<< >> |
shift |
Left-to-right |
| 9 |
< > <= >= |
relational |
Left-to-right |
| 10 |
== != |
equality |
Left-to-right |
| 11 |
& |
bitwise AND |
Left-to-right |
| 12 |
^ |
bitwise XOR |
Left-to-right |
| 13 |
| |
bitwise OR |
Left-to-right |
| 14 |
&& |
logical AND |
Left-to-right |
| 15 |
|| |
logical OR |
Left-to-right |
| 16 |
?: |
conditional |
Right-to-left |
| 17 |
= *= /= %= += -= >>= <<= &= ^= |= |
assignment |
Right-to-left |
| 18 |
, |
comma |
Left-to-right |