-1

我有条件验证地址是否为 31 位,除此之外我还必须检查我们不支持的其他地址。所以条件是这样的

if ((addr & (1 << 31)) || (addr == 0x000f000))
{
   printf("Not 31 bit Valid address");
}

现在我可以将其重写为

if ((addr & (1<<31)) ? 1 : (( addr == 0x000f000) ? 1 : 0))

现在有没有其他的写相同的东西,更短更独特的东西。

4

2 回答 2

9
if(addr >> 31 || addr == 0x000f000)
于 2013-10-10T11:23:40.103 回答
0

如果您addr至少是 32 位并且sizeof int是 2,则以下内容可以正常工作并且可以很好地移植。

if ((addr & 0x80000000) || (addr == 0x0000f000))

更好的编码风格将避免裸数。

#define InvalidAddressBitMask (0x80000000)
#define SpecialBadAddress     (0x0000f000)
if ((addr & InvalidAddressBitMask) || (addr == SpecialBadAddress))
于 2013-10-10T22:36:15.743 回答