- 与运算(&)
- 定义:与运算(&)是一种逻辑运算符,它对两个二进制位进行操作。当两个对应的二进制位都为 1 时,结果位才为 1,否则为 0。
- 示例:
- 假设我们有两个整数,分别是 5 和 3。5 的二进制表示是 101,3 的二进制表示是 011。
- 进行与运算:
- 101&011,从右往左计算,第一位是 1&1 = 1;第二位是 0&1 = 0;第三位是 1&0 = 0。
- 所以结果是 001,转换为十进制就是 1。
- 用途:
- 用于位屏蔽。例如,要获取一个整数的某些特定位的值,可以通过与一个特定的掩码进行与运算。如果想要获取一个字节(8 位)数据的低 4 位,可以将这个字节与 00001111 进行与运算。
- 检查某些位是否为 1。比如在权限控制中,不同的位可能代表不同的权限,通过与运算可以检查特定权限位是否被设置。
- 或运算(|)
- 定义:或运算(|)也是一种逻辑运算符。当两个对应的二进制位中有一个为 1 时,结果位就为 1,只有当两个二进制位都为 0 时,结果位才为 0。
- 示例:
- 还是以 5(101)和 3(011)为例。
- 进行或运算:
- 101|011,从右往左计算,第一位是 1|1 = 1;第二位是 0|1 = 1;第三位是 1|0 = 1。
- 所以结果是 111,转换为十进制就是 7。
- 用途:
- 用于设置某些位。例如,要将一个字节数据的某些位置 1,可以通过或运算与一个特定的掩码进行操作。如果要将一个字节的低 4 位设置为 1,可以将这个字节与 00001111 进行或运算。
- 合并多个条件。在编程中,有时候需要判断多个条件是否满足其中一个,就可以使用或运算来组合这些条件。
- 非运算(~)
- 定义:非运算(~)是一元运算符,它对一个二进制位进行操作,将 0 变为 1,1 变为 0。
- 示例:
- 假设我们有整数 5(二进制为 101)。
- 进行非运算:
- 对 101 进行非运算,先将其补码形式(因为计算机中存储的是补码)的每一位取反。正数的补码就是其本身,所以取反后得到 010。
- 这里得到的 010 是补码形式,转换为原码(因为最高位是 0,所以原码和补码相同),转换后十进制为 - 6(注意,在有符号数的情况下,非运算的结果会根据补码规则得到一个负数)。
- 用途:
- 用于对状态进行取反。例如,在布尔逻辑中,如果一个变量表示某个状态为真(1),通过非运算可以将其变为假(0),反之亦然。
- 异或运算(^)
- 定义:异或运算(^)是一种逻辑运算符。当两个对应的二进制位不同(一个为 0,一个为 1)时,结果位为 1,当两个二进制位相同(都为 0 或都为 1)时,结果位为 0。
- 示例:
- 以 5(101)和 3(011)为例。
- 进行异或运算:
- 101º11,从右往左计算,第一位是 1^1 = 0;第二位是 0^1 = 1;第三位是 1^0 = 1。
- 所以结果是 110,转换为十进制就是 6。
- 用途:
- 用于数据加密中的简单加密算法。例如,可以将一个数据与一个密钥进行异或运算来加密,再次用相同的密钥进行异或运算就可以解密。
- 比较两个数据是否有差异。如果两个相同长度的数据进行异或运算后结果为 0,说明这两个数据完全相同;如果结果不为 0,则说明有差异的位存在。
- 左移运算(<<)
- 定义:左移运算(<<)是将一个二进制数的所有位向左移动指定的位数。左移后,右边空出的位用 0 填充。
- 示例:
- 假设我们有整数 3(二进制为 011),将其左移 2 位。
- 011 << 2,所有位向左移动 2 位,得到 1100。转换为十进制就是 12。
- 用途:
- 快速实现乘法运算(乘以 2 的幂次方)。因为将一个数左移 n 位,相当于将这个数乘以2ⁿ。例如,将一个数左移 3 位,就相当于这个数乘以 8。
- 右移运算(>>)
- 定义:右移运算(>>)是将一个二进制数的所有位向右移动指定的位数。对于无符号数,左边空出的位用 0 填充;对于有符号数,左边空出的位用符号位(最高位)填充。
- 示例:
- 对于无符号数:假设我们有整数 12(二进制为 1100),将其右移 2 位。
- 1100 >> 2,所有位向右移动 2 位,得到 0011,转换为十进制就是 3。
- 对于有符号数:假设我们有有符号整数 - 4(二进制补码为 1100),将其右移 1 位。
- 因为是有符号数,右移时最高位(符号位)保持不变,1100 >> 1 得到 1110,转换为十进制是 - 2。
- 对于无符号数:假设我们有整数 12(二进制为 1100),将其右移 2 位。
- 用途:
- 快速实现除法运算(除以 2 的幂次方)。对于无符号数,将一个数右移 n 位,相当于将这个数除以2ⁿ。对于有符号数,在某些情况下也可以近似地实现除法运算,但要注意符号位的处理。
位运算与(&)、或(|)、非(~)、异或(^)、左移(<<)、右移(>>)
于 2024-11-25 21:29:32 首次发布