理解用于strlen优化的神奇数字0x07EFEFEFF

4
我偶然发现了关于使用魔数0x07EFEFEFF优化strlen这个答案,以下是最佳答案的内容:
查看魔术位。第16、24和31位为1。第8位为0。
- 第8位代表第一个字节。如果第一个字节不为零,则此时第8位变为1。否则为0。 - 第16位代表第二个字节。逻辑相同。 - 第24位代表第三个字节。 - 第31位代表第四个字节。
然而,如果我使用a = 0x100计算result = ((a + magic) ^ ~a) & ~magic,我发现result = 0x81010100,这意味着根据最佳答案者的说法,a的第二个字节等于0,这显然是错误的。
我错过了什么?
谢谢!

3
我不相信这个结果能准确告诉你哪个字节为零,它只能告诉你是否至少有一个字节为零。 - Ross Ridge
1个回答

5
只有当低位字节非零时,位才能告诉您字节是否为零--因此它只能告诉您第一个0字节,而不能告诉您第一个0之后的字节。
- bit8 = 1表示第一个字节为零。 其他字节未知。 - bit8 = 0表示第一个字节非零。 - bit8 = 0&bit16 = 1表示第二个字节为零,更高字节未知。 - bit8 = 0&bit16 = 0表示前两个字节均为非零。
另外,最后一位(bit31)仅告诉您最后一个字节的7位(仅当前3个字节非零时)--如果它是唯一设置的位,则最后一个字节为0或128(其余为非零)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接