4

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

int8_t x = 1;

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

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

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

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

4

1 回答 1

9

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

于 2013-03-24T15:08:02.323 回答