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

use*_*677 4 c++ binary bit-manipulation bit-shift bitwise-operators

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

int8_t x = 1;

std::cout << (x << 10);
Run Code Online (Sandbox Code Playgroud)

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

std::numeric_limits<int8_t>::max(); // 127
Run Code Online (Sandbox Code Playgroud)

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

NPE*_*NPE 9

<<正在被隐含地扩大的论点int,结果x << 10也是一个int.