为什么移位超过允许的位仍然有效?

时间:2013-03-24 15:06:21

标签: c++ binary bit-manipulation bitwise-operators bit-shift

我有一个int8_t我希望看到如果我将它向左移动超过8位会发生什么。所以这就是我所做的:

int8_t x = 1;

std::cout << (x << 10);

由于某种原因,这会返回1024,就好像该类型包含足够的位来表示该数字。我认为当你移位超过给定的位时,你会在所有位中得到0(或者有符号的溢出/下溢导致未定义的行为)。另外,我运行此代码以获得int8_t的最大数量:

std::numeric_limits<int8_t>::max(); // 127

此类型的最大数量为127,但向左移动可使其甚至高于其无符号类型!这怎么可能?

1 个答案:

答案 0 :(得分:9)

<<的参数被隐式扩展为int,而x << 10的结果也是int

相关问题