位运算符
位运算作用于整数类型的运算对象,并把运算对象看成是二进制位的集合。
- 如果运算对象是小整形将会被自动提升为较大的整数类型。
- 运算对象可以是带符号的也可以是无符号的,如果运算对象是带符号的数并且是负值,那么位运算如何处理该符号位是依赖于机器的。并且,此时的左移操作会改变符号的值,因此是一种未定义的行为。
- 关于符号位如何处理没有明确规定,所以强烈建议将位运算符用于处理无符号类型。
移位运算符
左移运算符(<<)在右侧插入值为0 的二进制位。
右移运算符(>>)的行为则依赖于其左侧对象的类型,如果该运算对象是无符号类型,在左侧插入值为0的二进制位;如果该运算对象是带符号类型,在左侧插入符号位的副本值或值为0的二进制位,如何选择视环境而定。
移位运算符又叫作IO运算符,满足左结合律:
cout<<"hi"<<"there"<<endl;
((cout<<"hi")<<"there")<<endl; //与上面等价