2.3.4 位运算符
前面讲过,二进制码中最小的单位是位(bit),8 位构成 1 字节。但我们前面所讲的算术运算符、关系运算符和逻辑运算符都不能对位直接进行操作,如果想要对位进行相应的操作就需要用到位运算符,如表 2.12 所示。
表 2.12 位运算符
为了更好地理解位运算符,下面举例说明整数 23,其 8 位的二进制码为“0001 0111”。
23 << 1:进行按位左移 1 位的操作,则会把这 8 位都向左移动 1 位,原来的最高位 0 被移出抛弃,最低位补 0,最终得到“0010 1110”这样一个 8 位的二进制码,对应的整数值为 46,正好是 23 的 2 倍。
23>>1:进行按位右移 1 位的操作,则会把这 8 位都向右移动 1 位,原来的最低位 1 被移出抛弃,最高位补符号位 0,最终得到“0000 1011”这样一个 8 位的二进制码,对应的整数值为 11,正好是 23 被 2 整除的结果。
~23:对 8 位二进制码进行按位取反,得到结果“1110 1000”,最高位由 0 变成了 1,所以成了一个负数,对应的整数值为–24。
现在再来一个整数 50,其 8 位二进制码为“00110010”。
23 & 50:将两个整数的二进制码的每一位进行按位与的操作,即对应的两位都为 1 时,结果为 1,否则为 0,得到结果码为“0001 0010”,对应的整数值为 18。
23 | 50:将两个整数的二进制码的每一位进行按位或的操作,即对应的两位都为 0 时,结果为 0,否则为 1,得到结果码为“0011 0111”,对应的整数值为 55。
23 ^ 50:将两个整数的二进制码的每一位进行按位异或的操作,即对应的两位不同(一个为 1,一个为 0)时,结果为 1,两位相同(同为 1 或同为 0)时为 0,得到结果码为“0010 0101”,对应的整数值为 37。
这里的按位与运算符与逻辑与运算符、按位或运算符与逻辑或运算符、按位取反运算符与逻辑非运算符看起来是有些类似,但有着本质的不同:逻辑运算符都是对操作数进行运算的,而位运算符是对操作数的二进制位进行运算的,这一点要谨记。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论