在c语言中,负数向右移动1位也算是除以2吗?

2019-03-25 17:42发布

在c语言中,负数向右移动1位也算是除以2吗? 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
carrotchen
1楼-- · 2019-03-25 23:22
smartygt
2楼-- · 2019-03-26 02:35
看了还是不明白, 比如说是 -100 , 如果是向右移动3位 ,好像按照您的算了 不对
carrotchen
3楼-- · 2019-03-26 07:13
C语言的有符号整数向右移位运算不等同于除以2的某次幂。如(-1)/2和(-1)>>1,前者的结果一般是0,后者一般是-1,所以在C语言中,负数向右移动1位并不等同于除以2。

解决的方法是:当除数是2的N次幂时,x/(2^N),可以用移位操作(x + 2^N - 1) >> N来代替。其中x + 2^N - 1须小于0,^是乘方操作。

在C语言中,-100/8=-12,而-100>>3=-13,两者不相等,而用(-100+7)>>3代替则相等。
smartygt
4楼-- · 2019-03-26 12:33
明白了 谢谢!

一周热门 更多>