我在比特移位的影响下查看了负整数的二进制表示,我注意到这些比特移位的行为与正比特不同。
int imax = std::numeric_limits<int>::max();
std::bitset<32> bs0(imax+1);
std::cout << bs0 << "\n";
std::bitset<32> bs1((imax+1) >> 1);
std::cout << bs1 << "\n";
std::bitset<32> bs2((imax+1) >> 2);
std::cout << bs2 << "\n";
输出:
10000000000000000000000000000000
11000000000000000000000000000000
11100000000000000000000000000000
我的预期是:
10000000000000000000000000000000
01000000000000000000000000000000
00100000000000000000000000000000
这种行为是什么?或者 - 如果它本身没有任何理由 - 那为什么会发生呢?