我偶然发现this answer关于使用用于strlen
优化的幻数0x07EFEFEFF的问题,以下是最佳答案:
看看神奇的位。第16,24和31位为1.第8位为0.
- 第8位表示第一个字节。如果第一个字节不为零,则此时第8位变为
1
。否则它是0
。- 第16位表示第二个字节。相同的逻辑。
- 第24位代表第三个字节。
- 第31位代表第四个字节。
但是,如果我使用result = ((a + magic) ^ ~a) & ~magic
计算a = 0x100
,我会发现result = 0x81010100
,这意味着根据最高回答者,a
的第二个字节等于0,显然是假的。
我错过了什么?
谢谢!
答案 0 :(得分:4)
如果低位字节非零,这些位只告诉你一个字节是否为零 - 所以它只能告诉你第一个0字节,而不是第一个0之后的字节。
此外,最后一位(bit31)仅告诉您最后一个字节的大约7位(并且仅当前3个字节非零时) - 如果它是唯一的位设置则最后一个字节为0或者128(其余为非零)。