4
我有一个int8_t
,我想看看会发生什么,如果我把它移到比8位更远的地方。所以这就是我所做的:为什么移位超过允许位仍然有效?
int8_t x = 1;
std::cout << (x << 10);
由于某种原因,这返回1024就好像类型包含足够的位来表示该数字。我认为,当你移动超过给定的位时,你会在所有位中得到0(或者导致未定义行为的有符号溢出/下溢)。此外,我跑这个代码给我的int8_t
最大数量:
std::numeric_limits<int8_t>::max(); // 127
这种类型的最大数量为127个,但换挡它留下可以让它甚至比去的无符号类型更高!这怎么可能?
我怎样才能把它保留到'int8_t'? – user2030677 2013-03-24 15:08:37
@ user2030677你不能。如果需要,您可以在轮班后施放结果。然后您将实现定义的超出范围值转换为有符号整数类型。 – 2013-03-24 15:10:01
@DanielFischer和NPE:假设如果我换成:'int8_t y = 10; std :: cout <<(x << y);'那么它将返回int **?**或输出将是'0' – 2013-03-24 15:10:47