warning C4552: “>>”: 运算符不起任何作用;应输入带副作用的运算符

本文详细解释了在C++编程中,移位操作符>>与>>=的用法区别及常见陷阱,通过实例演示避免误用导致的警告信息C4552。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:http://www.letuknowit.com/topics/20111124/warning-c4552.html/


今天在写一个小程序的时候,需要用到移位操作,可谁想竟然给弄出来个warning C4552,具体错误如下:

warning C4552: “>>”: 运算符不起任何作用;应输入带副作用的运算符

检查了下代码,原来是自己疏忽导致的,我的代码如下:

int a=2;

a>>1;

  本来是想将变量a进行移位操作,可是最终的结果是a原先是多少,最后还是多少,一点也没变,正确的写法应该是:

a>>=1;

  >>只是个运算符,和+、-等运算符一样,只执行运算的功能,却不会改变操作数的值,因此作为左操作数的a在执行移位操作后会保持原来的值不变,这是一个很要命的、不显眼的错误,因为本来应该进行移位的操作却没有执行,而编译没有任何问题,还好在编译的时候有标题中所示的C4552警告信息。

如果你愿意,你可以编译一下下面的代码

int a = 2;
 a>>1;
 a+1;
 a-1;
 a*1;
 a/1;

你会得到下面的警告信息,这样看起来应该就好理解了

warning C4552: “>>”: 运算符不起任何作用;应输入带副作用的运算符
warning C4552: “+”: 运算符不起任何作用;应输入带副作用的运算符
warning C4552: “-”: 运算符不起任何作用;应输入带副作用的运算符
warning C4552: “*”: 运算符不起任何作用;应输入带副作用的运算符
warning C4552: “/”: 运算符不起任何作用;应输入带副作用的运算符

  把a>>1;误认为可以改变a的值,估计是受到++和–操作符的影响,谁叫人家长得比较像了,下次要注意了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值