【发布时间】:2016-06-18 23:47:32
【问题描述】:
我偶然发现this answer 使用了用于strlen 优化的幻数 0x07EFEFEFF,以下是最佳答案:
看看魔法位。第 16、24 和 31 位为 1。第 8 位为 0。
- 第 8 位代表第一个字节。如果第一个字节不为零,此时第 8 位变为
1。否则为0。- 第 16 位表示第二个字节。同样的逻辑。
- 第 24 位代表第三个字节。
- 第 31 位代表第四个字节。
但是,如果我用a = 0x100计算result = ((a + magic) ^ ~a) & ~magic,我发现result = 0x81010100,意思是根据top answerer,a的第二个字节等于0,这显然是错误的。
我错过了什么?
谢谢!
【问题讨论】:
-
我不相信结果实际上会告诉您哪个字节为零。它只会告诉您是否至少有一个字节为零。
标签: c assembly bit-manipulation strlen