相关疑难解决方法(0)

算术右移给出虚假的结果?

我必须在这里绝对疯狂,但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;
}
Run Code Online (Sandbox Code Playgroud)

现在,这是正确的本身转移任意数量应该导致0(n/(2^n) == 0与整数除法,n>1和正/无符号),但不知何故,这里是我的输出:

100000
100000
100000
Run Code Online (Sandbox Code Playgroud)

我疯了吗?可能会发生什么?

c++ gcc bit-shift undefined-behavior

30
推荐指数
2
解决办法
1641
查看次数

标签 统计

bit-shift ×1

c++ ×1

gcc ×1

undefined-behavior ×1