C++Primer4.8节——位运算符
1、位运算符
①位运算符作用于整数类型的运算对象,且把运算对象当作二进制的集合。
②位运算符提供检查和设置二进制位的功能。
③如果运算对象是“小整型”–char、bool型等,则它的值会自动提升成较大的整型–int、long型等。
char型一般是8位,int型一般是32位。
④强烈建议仅将位运算用于处理无符号类型。
2、移位运算符
①<<和>>两种移位运算符的内置含义是对其运算对象执行基于二进制位的移动操作——首先令左侧运算对象的内容按照右侧运算对象的要求移动指定位数。
②形式: var<<5; //将var向左移动5位;或var>>5; //将var向右移动5位。
③运算结果
移位运算过后的运算结果是移位后的左侧运算对象的拷贝。
注意:
(1)右侧运算对象一定不能为负,且它的值一定要小于结果的位数。
④运算结果的写法
(1)左移运算符<<在右侧插入值为0的二进制位。即在左移后,在右侧补零至足够的位数。
(2)右移运算符>>根据左侧运算对象的符号类型有不同的写法。若左侧运算对象是无符号类型,则在左侧补零;若左侧运算对象是有符号类型的,在左侧补零,但最后符号位保持不变。
⑤IO运算符——移位运算符的重载版本
(1)重载运算符的优先级和结合律跟它的内置版本一样。
(2)<<和>>运算符的优先级位于中间,比算术运算符的优先级低,比比较和赋值运算符的优先级高。
(3)都满足左结合律。
(4)IO运算符的作用,将数据写入输出流或从输入流读取数据。
3、位求反运算符
将运算对象逐位取反后生成一个新值,将1置为0,0置为1。
4、位与、位或、位异运算符
①位与(&)运算符:如果两个运算对象的对应位置都是1则运算结果中该位为1。
②位或(|) 运算符:如果两个运算对象的对应位置至少有一个为1则运算结果中该位为1。
③位异(^)运算符:如果两个运算对象的对应位置都为1或都为0,则运算结果为0,否则为1。