&,与
含义:
取得被运算的两个值同为 1 的位。
运算方式:
两个位都为1 时,结果才为 1 。
示例:
0 0 1 0 0 0 1 1 --> 0x23(Hex) --> 35(Dec)
& 0 1 0 1 0 0 1 0 --> 0x52(Hex) --> 82(Dec)
------------------
0 0 0 0 0 0 1 0 --> 0x02(Hex) --> 2(Dec)
以上示例中,取得了值 0x23 和 0x52 同为 1 的位。
|,或
含义:
获取两个值都为 0 的位。
或者
获取两个值至少存在一个 1 的位。
运算方式:
两个位都为 0 时,结果才为 0 。
示例:
0 0 1 0 0 0 1 1
| 0 1 0 1 0 0 1 0
------------------
0 1 1 1 0 0 1 1
^,异或
含义:
获取两个值的异同情况。
运算方式:
相同得 0 ,相异得 1 。
示例:
0 0 1 0 0 0 1 1
^ 0 1 0 1 0 0 1 0
------------------
0 1 1 1 0 0 0 1
~,取反
运算方式:
0 变 1 ,1 变 0。
示例:
^ 0 0 1 0 0 0 1 1
------------------
1 1 0 1 1 1 0 0
左移
运算方式:
各二进制位全部左移若干位,高位丢弃,低位补零。
示例:
1 << 0 0 1 0 0 0 1 1
---------------------
0 1 0 0 0 1 1 0
以上示例为:将值左移 1 位。
右移
运算方式:
各二进制位全部右移若干位
- 对于无符号数,高位补零。
- 对于有符号数,各编译器处理方法不一样,有的补符号位(即忽略第一位符号位,其余右移),有的补零(全都补零)。