设为首页 加入收藏

TOP

E.1.1 移位运算符
2013-10-07 15:47:36 来源: 作者: 【 】 浏览:71
Tags:E.1.1 移位 运算

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中所有的位向右移两位:

 

对于无符号整数,腾出的位置用0填充,超过边界的位被删除。对于有符号整数,腾出的位置可能用0填充,也可能用原来最左边的位填充,这取决于C++(www.cppentry.com)实现(图E.2是一个用0填充的例子)。

 
(点击查看大图)图E.2  右移运算符

向右移动一位相当于除以2。向右移动n位相当于除以2n。

C++(www.cppentry.com)还定义了一个"右移并赋值"运算符,如果要用移动后的值替换变量的值,可以这样做:

 
在有些系统上,使用左移运算符(右移运算符)实现将整数乘(除)以2的速度比使用乘(除)法运算符更快,但由于编译器在优化代码方面越来越好,因此这种差异正在减小。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇E.1 按位运算符 下一篇F.2 数据信息、构造函数及其他(2..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Shell 传递参数 (2025-12-25 00:50:45)
·Linux echo 命令 - (2025-12-25 00:50:43)
·Linux常用命令60条( (2025-12-25 00:50:40)
·nginx 监听一个端口 (2025-12-25 00:19:30)
·整个互联网就没有一 (2025-12-25 00:19:27)