我有一个int8_t
我希望看到如果我将它向左移动超过8位会发生什么。所以这就是我所做的:
int8_t x = 1;
std::cout << (x << 10);
由于某种原因,这会返回1024,就好像该类型包含足够的位来表示该数字。我认为当你移位超过给定的位时,你会在所有位中得到0(或者有符号的溢出/下溢导致未定义的行为)。另外,我运行此代码以获得int8_t
的最大数量:
std::numeric_limits<int8_t>::max(); // 127
此类型的最大数量为127,但向左移动可使其甚至高于其无符号类型!这怎么可能?
答案 0 :(得分:9)
<<
的参数被隐式扩展为int
,而x << 10
的结果也是int
。