我正在从 https://github.com/antirez/redis 阅读 redis 的源代码。
我在 src/ziplist.c 中看到了这样的宏
#define INT24_MAX 0x7fffff
#define INT24_MIN (-INT24_MAX - 1)
为什么不这样做?
#define INT24_MIN (~INT24_MAX)
最佳答案
一个更好的问题可能是你为什么认为 (~INT24_MAX)
比 (-INT24_MAX - 1)
好?
在二进制补码机上,您可以从任一表达式获得相同的结果,并且它们的计算速度与另一个相同(对于 32 位目标,编译器会在编译时将它们都减少为 0xff800000
)。然而,在我看来,表达式 (-INT24_MAX - 1)
更好地模拟了数值概念,即最小值比最大值的否定小一。
这可能不是很重要,但是从客观的角度来看,表达 (~INT24_MAX)
并不是更好,我认为主观上它可能没有那么好。
基本上,(-INT24_MAX - 1)
可能是编码人员碰巧想到的(也许正如我所提到的,它模拟了数字上的意图),并且没有理由使用其他东西。
关于c - 为什么不使用 VAL 的补码而不是 (-VAL -1),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16229309/