整数<<32和<<31<<1之间的区别
difference between integer <<32 and <<31<<1
int exp1 = ((1<<31)>>31)<<32 // output changes everytime
int exp2 = ((1<<31)>>31)<<31<<1 // 0
为什么会这样?
可能是overflow thing导致的,但是无法正确理解
我花了几个小时试图解决这个问题,需要一些帮助
(p.s 32 位整数)
按整个类型大小或更多进行移位是未定义的行为,因此任何事情都有可能发生(这是因为许多体系结构移位指令在这些情况下都有奇怪的行为)。将轮班分成两部分可以解决这个问题。
int exp1 = ((1<<31)>>31)<<32 // output changes everytime
int exp2 = ((1<<31)>>31)<<31<<1 // 0
为什么会这样?
可能是overflow thing导致的,但是无法正确理解
我花了几个小时试图解决这个问题,需要一些帮助
(p.s 32 位整数)
按整个类型大小或更多进行移位是未定义的行为,因此任何事情都有可能发生(这是因为许多体系结构移位指令在这些情况下都有奇怪的行为)。将轮班分成两部分可以解决这个问题。