整数<< 32和<< 31 << 1之间的差

时间:2018-09-22 12:53:44

标签: c bit-shift

int exp1 = ((1<<31)>>31)<<32 // output changes everytime
int exp2 = ((1<<31)>>31)<<31<<1 // 0

为什么会这样?

可能是由溢出物引起的,但无法正确理解。

我试图解决这个问题已有几个小时,需要一些帮助

(32位的p.s整数)

1 个答案:

答案 0 :(得分:3)

移位整个类型大小或更多是未定义的行为,因此任何事情都可能发生(这是由于许多体系结构移位指令在这些情况下具有奇怪的行为这一事实)。将转移分为两个部分可解决此问题。