刨根问底:C++的移位操作

以前一直有个误区,认为负整数的右移位操作符不会改变变量值,但最近查阅文档发现,其实这只是VC编译器的行为,而这种行为并不是ISO文档里规定死的,因此,做个小结。


这部分内容在C99文档的6.5.7能找到。


移位之前首先做的是整形提升。<<操作符不用说了,右侧补0。>>操作符,这个有点意思,结果取决于左侧是什么值,如果是个unsigned的,那没关系,正常操作,如果是个signed,存了个正数,也没关系,但如果是个负数,那就没准了,如何实现完全看编译器,在VC里是无效操作,我试了下GCC,也是一样,暂且理解成一种不成文的规定吧。


另外,其实signed的负数做左移也是undefined,编译器甚至不需要支持这种操作,但在VC中是符号位保持不动,其他位右侧补0,是不是也能看成是个不成文的规定?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值