位操作是程序设计中对位模式按位或二进制数的一元和二元操作。在现代架构中,位运算的运算速度通常与加法运算相同,但仍然快于乘法运算
二进制
是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数
位模式
一种二进制数1和0的一维或二维数组,是计算机用来存储和处理信息的最小单位
- 表达式:A | B
- 功能:将 A 的各位与 B 的对应位进行比较,如果两者中至少有一个为1,A | B对应位上的值为 1,否则为 0
- 示例:
1 | 2
=3
A | 0 | 1 |
---|---|---|
B | 1 | 0 |
A | B | 1 | 1 |
- 表达式:A & B
- 功能:将 A 的各位与 B 的对应位进行比较,如果两者都为为1,A & B对应位上的值为 1,否则为 0
- 示例:1 & 2 = 0
A | 0 | 1 |
---|---|---|
B | 1 | 0 |
A & B | 0 | 0 |
- 表达式:A ^ B
- 功能:将 A 的各位与 B 的对应位进行比较,如果两者不同,A ^ B对应位上的值为 1,否则为 0
- 示例:1 ^ 2 = 3
A | 0 | 1 |
---|---|---|
B | 1 | 0 |
A ^ B | 1 | 1 |
- 表达式:~A
- 功能:将 A 的各位都取反(即 0 变 1,1 变 0)后所得到值
- 示例:~1 = 4294967294 (A 为 unsigned int 且 32位)
A | 0000 0000 0000 0001 |
---|---|
~A | 1111 1111 1111 1110 |
- 表达式:A << n (n > 0)
- 功能:将 A 的值向左移动 n 位,右边空出的 n 位用 0 填补
- 示例:1 << 1 = 2
A | 0 | 1 |
---|---|---|
A << 1 | 1 | 0 |
- 表达式:A >> n (n > 0)
- 功能:将 A 的值向右移动 n 位,左边空出的 n 位用 0 填补
- 示例:1 >> 1 = 0
A | 0 | 1 |
---|---|---|
A >> 1 | 0 | 0 |
注意:
- 在对无符号
(unsigned)
类型值进行右移时,左边空出的部分使用 0 填充 - 在对有符号类型值进行右移时,有2种移位方案可以选择,方案的选择由对应的编译器决定
- 逻辑移位:用 0 填充
- 算术移位:用符号位
(0: 正数,1: 负数)
填充。以保证原数正负形式不变