#define NP_MAXREADY (((unsigned)(~0)<<1)>>1)
我把它当作:用1填充寄存器大小的unsigned int,然后摆脱MSB,获得signed int的最大值。这是对的吗?另外,为什么他们这样做的原因完全躲避了我,请指教。
答案 0 :(得分:7)
我们必须看到使用它的代码才能确定,但“有符号整数的最大值”也是我的猜测。
至于为什么他们这样做 - 可能是因为他们不知道INT_MAX
答案 1 :(得分:7)
您可以将其重写为
#define NP_MAXREADY (((~0u)<<1)>>1)
然后你会注意到内移操作完全没用,因为它唯一的作用是移出最高位
#define NP_MAXREADY ((~0u)>>1)
反过来
#define NP_MAXREADY (UINT_MAX/2)
除了另一个答案中所述,这不是INT_MAX
,因为首先这里的这个是unsigned
,所以类型不同。然后signed
与unsigned
的表示可能有填充位,因此您永远无法确定这两个具有相同的值。