C语言中的右移一位是不是应该除以2?
答案:1 悬赏:70
解决时间 2021-01-05 01:49
- 提问者网友:别再叽里呱啦
- 2021-01-04 01:37
C语言中的右移一位是不是应该除以2?
最佳答案
- 二级知识专家网友:我住北渡口
- 2021-01-04 02:15
不是
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代替则相等。
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代替则相等。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯