我一定是疯了,但是我机器上的gcc 4.7.3
却给出了荒谬的结果。以下是我正在测试的精确代码:
#include <iostream>
using namespace std;
int main(){
unsigned int b = 100000;
cout << (b>>b) << endl;
b = b >> b;
cout << b << endl;
b >>= b;
cout << b << endl;
return 0;
}
现在,任何一个数字如果被自己右移,应该会得到0 (n/(2^n) == 0
,其中 n>1
,且为正/无符号整数),但是一些情况下我的输出结果如下:
100000
100000
100000
我是疯了吗?到底发生了什么事?
-O0
时,gcc
似乎才会产生一个shr
。 - Shafik Yaghmourx>>y
的计算方式是x>>(y&0x1f)
!因此,(x >> 16) >> 16
为零,但x >> 32
等于x。 - Eric Lippert