位运算

位运算

&,与 含义: 取得被运算的两个值同为 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) --------

&,与

含义:
取得被运算的两个值同为 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 位。

右移

运算方式:
各二进制位全部右移若干位

  • 对于无符号数,高位补零。
  • 对于有符号数,各编译器处理方法不一样,有的补符号位(即忽略第一位符号位,其余右移),有的补零(全都补零)。
LICENSED UNDER CC BY-NC-SA 4.0
Comment