我正在从 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/

10-12 16:08
查看更多