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

2019-03-25 17:42发布

在c语言中,负数向右移动1位也算是除以2吗? 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
carrotchen
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代替则相等。

一周热门 更多>