![]() ![]() |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
二级C++精品课程3-1-5:C++运算符之位运算符 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
作者:佚名 文章来源:不详 点击数 更新时间:2008/4/18 14:39:59 文章录入:杜斌 责任编辑:杜斌 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
C++提供6种位运算符,可以进行二进制位的运算,参见表3-7。 位运算符要求操作数是整型数,并按二进制位的顺序来处理它们。取反运算符是单目运算符,其它位运算符是双目运算符。取反运算符(~)将操作数的二进制位逐位取反。逐位与运算符(&)比较两个操作数对应的二进制位,当两个二进制位均为1时,该位的结果取1,否则取0。逐位或运算符(|)比较两个操作数对应的二进制位,当两个二进制位均为0时,该位的结果取0,否则取1。逐位异或运算符(^)比较两个操作数对应的二进制位,当两个二进制位均为1或均为0时,该位的结果取0,否则取1。 逐位左移运算符(<<)和逐位右移运算符(>>)均有一个正整数n作为右操作数,将左操作数的每一个二进制位左移或右移n位,空缺的位设置为0或1。对于无符号整数或有符号整数,如果符号位为0(即为正数),空缺位设置为0;如果符号位为1(即为负数),空缺位是设置为0还是设置为1,要取决于所用的计算机系统。
位操作运算符是用来进行二进制位运算的运算符。它分为两类:逻辑位运算符和移位运算符。 针对两个操作数011和027,表3-8给出各个位运算符的计算实例,运算结果在表3-7中。为了避免符号位的麻烦(它与机器有关),我们采用无符号的整数。
'&'为逐位与运算符,用于把两个操作数对应的二进制位进行逻辑与操作,逻辑与的操作上一节已经作了介绍,这里不再赘述。所以0x011&0x001其实就是二进制数0000000000010001B 和二进制数0000000000000001B每一位都进行逻辑与运算,其结果必然是0000000000000001B 即0x001。 '|'为逐位或运算符,用于把两个操作数对应的二进制位进行逻辑或操作。所以,根据逻辑或的运算规则,表达式0x011|0x001的结果必然是0x011。有兴趣的同学可以自己把相应的二进制位进行逐个的逻辑或运算,看看结果是不是0x011.。 '^'为逐位异或运算符,用于把两个操作数对应的二进制位进行异或操作。因此,0x011^0x001的结果是0000000000010000B,即0x010。 '<<'为逐位左移运算符,用于将左操作数的每一个二进制位左移右操作数位,空缺的位设置为0或1。对于无符号整数或有符号整数,但符号位为0(即为正数),空缺位设置为0;如果符号位为1(即为负数),空缺位是设置为0,还是设置为1,要取决于所用的计算机系统。因此,0x011<<2 结果是0x044。 '>>'为逐位右移运算符,将左操作数的每一个二进制位右移右操作数位,空缺的位设置为0或1,和逐位左移运算符一致。因此,0x011>>2的结果是0x004 具体的运算的进行还可以参考表3-7位运算符如何运算。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() ![]() |