gpt4 book ai didi

c++ - 有符号和无符号的位移位操作

转载 作者:太空狗 更新时间:2023-10-29 20:04:36 27 4
gpt4 key购买 nike

我正在对一个 int 进行移位操作,结果没有按预期进行,这让我感到很惊讶。

int i, res;
i = 0x80000000;
res = i>>1; //results in 0xc0000000
res = (unsigned int) i>>1; //results in 0x40000000

整数中的一位移位怎么可能只对第 31 位起作用?

最佳答案

你看到的可能是arithmetic bit shift .

when shifting to the right, the leftmost bit (usually the sign bit in signed integer representations) is replicated to fill in all the vacant positions (this is a kind of sign extension).

C99 standard 6.5.7§5 说:

The result of E1 >> E2 is E1 right-shifted E2 bit positions. [...] If E1 has a signed type and a negative value, the resulting value is implementation-defined.

因此,结果可能是编译器编写者决定的任何结果。他们可能决定扩展符号位,编译器文档应该提到它。

关于c++ - 有符号和无符号的位移位操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18631574/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com