c - 整数 <<32 和 <<31<<1 之间的差异
问题描述
int exp1 = ((1<<31)>>31)<<32 // output changes everytime
int exp2 = ((1<<31)>>31)<<31<<1 // 0
为什么会这样?
它可能是由溢出的东西引起的,但无法正确理解。
我试图解决这个问题几个小时,需要一些帮助
(32 位的 ps 整数)
解决方案
移位整个类型大小或更多是未定义的行为,因此任何事情都可能发生(这是因为许多架构移位指令在这些情况下具有奇怪的行为)。将班次分成两部分可以解决这个问题。