我偶然发现了 this answer 关于用于 strlen
优化的魔数(Magic Number) 0x07EFEFEFF 的利用,这是最佳答案所说的:
但是,如果我用 result = ((a + magic) ^ ~a) & ~magic
计算 a = 0x100
,我会发现 result = 0x81010100
,这意味着根据顶级回答者,a
的第二个字节等于 0,这显然是错误的。
我错过了什么?
谢谢!
最佳答案
如果低字节不为零,这些位只会告诉您一个字节是否为零——因此它只能告诉您第一个 0 字节,而不能告诉您第一个 0 之后的字节。
此外,最后一位 (bit31) 仅告诉您最后一个字节的大约 7 位(并且仅当前 3 个字节非零时)——如果它是唯一设置的位,则最后一个字节是 0 或 128(并且其余的都是非零)。
关于c - 了解用于 strlen 优化的魔数(Magic Number) 0x07EFEFEFF,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37902628/