看到如下计算字符串长度的代码,不禁叫绝...
- size_t strlen(const char *str)
-
{
-
unsigned v;
-
const char *p = str;
-
while(*p && ((unsigned)p & 3))
-
p ++;
-
if (*p == 0)
-
return (size_t)(p - str);
-
for (v = 0; !v; p += 4)
-
{
-
v = (*(unsigned*)p - 0x01010101) & 0x80808080;
-
if (v)
-
v &= ~*(unsigned*)p;
-
}
-
for (; (v & 0xff) == 0; p ++)
-
v >>= 8;
-
return (size_t)(p - str - 4);
-
}
在32位机器上,一次比较4字节。效率比每字节比较应该快些。
代码不会太难理解,问题人家又是如何从无到有想到这个办法的昵?