gpt4 book ai didi

c - 在此表达式中究竟计算了什么,为什么?

转载 作者:太空狗 更新时间:2023-10-29 15:13:35 25 4
gpt4 key购买 nike

#define NP_MAXREADY (((unsigned)(~0)<<1)>>1)

我理解为:将寄存器大小的unsigned int填入1,然后抖掉MSB,得到signed int的最大值。这是正确的吗?还有,他们这样做的原因为什么完全绕过了我,请指教。

最佳答案

您可以将其重写为

#define NP_MAXREADY (((~0u)<<1)>>1)

然后你会注意到内部移位操作完全没用,因为它的唯一作用是移出最高位

#define NP_MAXREADY ((~0u)>>1)

反过来又什么都不是

#define NP_MAXREADY (UINT_MAX/2)

除了在另一个答案中提到的,这不是 INT_MAX,因为这里首先是一个 unsigned,所以类型不同。然后 signedunsigned 的表示可能有填充位,因此您永远无法确定这两者具有相同的值。

关于c - 在此表达式中究竟计算了什么,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5072609/

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