负数的按位右移

时间:2016-08-23 23:08:35

标签: c++ bit-shift negative-number

我在比特移位的影响下查看了负整数的二进制表示,我注意到这些比特移位的行为与正比特不同。

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

这种行为是什么?或者 - 如果它本身没有任何理由 - 那为什么会发生呢?

0 个答案:

没有答案