我偶然发现了 this answer 关于用于 strlen 优化的魔数(Magic Number) 0x07EFEFEFF 的利用,这是最佳答案所说的:



但是,如果我用 result = ((a + magic) ^ ~a) & ~magic 计算 a = 0x100 ,我会发现 result = 0x81010100 ,这意味着根据顶级回答者,a 的第二个字节等于 0,这显然是错误的。

我错过了什么?

谢谢!

最佳答案

如果低字节不为零,这些位只会告诉您一个字节是否为零——因此它只能告诉您第一个 0 字节,而不能告诉您第一个 0 之后的字节。

  • bit8=1 表示第一个字节为零。其他字节,未知
  • bit8=0 表示第一个字节是非零的
  • bit8=0 & bit16=1 表示第二个字节为零,高字节未知
  • bit8=0 & bit16=0 mans 前两个字节非零。

  • 此外,最后一位 (bit31) 仅告诉您最后一个字节的大约 7 位(并且仅当前 3 个字节非零时)——如果它是唯一设置的位,则最后一个字节是 0 或 128(并且其余的都是非零)。

    关于c - 了解用于 strlen 优化的魔数(Magic Number) 0x07EFEFEFF,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37902628/

    10-11 15:46