E.1.1 移位运算符
左移运算符的语法如下:
其中,value是要被操作的整数值,shift是要移动的位数。例如,下面的代码将值13的所有位都向左移3位:
腾出的位置用0填充,超出边界的位被丢弃(参见图E.1)。
由于每个位都表示右边一位的2倍(参见附录A),所以左移一位相当于乘以2。同样,左移2位相当于乘以22,左移n位相当于乘以2n。因此,13<<3的值为13 × 23,即104。
|
| (点击查看大图)图E.1 左移运算符 |
左移运算符提供了通常可以在汇编语言中找到的功能。不过,左移运算符在汇编语言中会直接修改寄存器的内容,而C++(www.cppentry.com)左移运算符生成一个新值,而不修改原来的值。例如,请看下面的代码:
上述代码不会修改x的值。表达式x<<3使用x的值来生成一个新值,就像x+3会生成一个新值,而不会修改x一样。
如果要用左移运算符来修改变量的值,则还必须使用赋值运算符。可以使用常规的赋值运算符或<<=运算符(该运算符将移动与赋值结合在一起):
其中,value是要移动的整数值,shift是要移动的位数。例如,下面的代码将值17中所有的位向右移两位:
|
| (点击查看大图)图E.2 右移运算符 |
向右移动一位相当于除以2。向右移动n位相当于除以2n。
C++(www.cppentry.com)还定义了一个"右移并赋值"运算符,如果要用移动后的值替换变量的值,可以这样做:

