二级C++精品课程3-1-5:C++运算符之位运算符
www.nanhushi.com 佚名 不详
3.1.5 位运算符 C++提供6种位运算符,可以进行二进制位的运算,参见表3-7。 位运算符要求操作数是整型数,并按二进制位的顺序来处理它们。取反运算符是单目运算符,其它位运算符是双目运算符。取反运算符(~)将操作数的二进制位逐位取反。逐位与运算符(&)比较两个操作数对应的二进制位,当两个二进制位均为1时,该位的结果取1,否则取0。逐位或运算符(|)比较两个操作数对应的二进制位,当两个二进制位均为0时,该位的结果取0,否则取1。逐位异或运算符(^)比较两个操作数对应的二进制位,当两个二进制位均为1或均为0时,该位的结果取0,否则取1。 逐位左移运算符(<<)和逐位右移运算符(>>)均有一个正整数n作为右操作数,将左操作数的每一个二进制位左移或右移n位,空缺的位设置为0或1。对于无符号整数或有符号整数,如果符号位为0(即为正数),空缺位设置为0;如果符号位为1(即为负数),空缺位是设置为0还是设置为1,要取决于所用的计算机系统。
位操作运算符是用来进行二进制位运算的运算符。它分为两类:逻辑位运算符和移位运算符。 1、逻辑位运算符 (1)单目逻辑位运算符:~(按位求反) 作用是将各个二进制位由1变0,由0变1。 (2)双目逻辑运算符:&(按位与),|(按位或),^(按位异或) 其中优先级&高于^,而^高于|。 & :两个都为1时结果为1。 | :两个其中有一个为1则结果为1。 ^ :两个不同则结果为1,否则为0。 2、移位运算符 移位运算符有两个,<<(左移)、>>(右移)。两个 都是双目运算符。 例. 指出下面表达式的功能。 (p&0377)|(k&0xff)<<8 答:将整数p的低字节作为作为结果的低字节,k的低字节作为结果的高字节拼成一个新的整数。
针对两个操作数011和027,表3-8给出各个位运算符的计算实例,运算结果在表3-7中。为了避免符号位的麻烦(它与机器有关),我们采用无符号的整数。 unsigned char x = '\011'; unsigned char y = '\027';