首页 > 解决方案 > 整数 <<32 和 <<31<<1 之间的差异

问题描述

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

为什么会这样?

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

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

(32 位的 ps 整数)

标签: cbit-shift

解决方案


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


推荐阅读