Chinaunix首页 | 论坛 | 博客
  • 博客访问: 237994
  • 博文数量: 47
  • 博客积分: 1229
  • 博客等级: 中尉
  • 技术积分: 568
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-20 10:06
文章分类

全部博文(47)

文章存档

2014年(1)

2013年(7)

2012年(1)

2011年(38)

分类: C/C++

2011-03-18 23:02:17

看到如下计算字符串长度的代码,不禁叫绝...

  1. size_t strlen(const char *str)
  2. {
  3.     unsigned v;
  4.     const char *p = str;
  5.     while(*p && ((unsigned)p & 3))
  6.         p ++;
  7.     if (*p == 0)
  8.         return (size_t)(p - str);
  9.     for (v = 0; !v; p += 4)
  10.     {
  11.         v = (*(unsigned*)p - 0x01010101) & 0x80808080;
  12.         if (v)
  13.             v &= ~*(unsigned*)p;
  14.     }
  15.     for (; (v & 0xff) == 0; p ++)
  16.         v >>= 8;
  17.     return (size_t)(p - str - 4);
  18. }

在32位机器上,一次比较4字节。效率比每字节比较应该快些。
代码不会太难理解,问题人家又是如何从无到有想到这个办法的昵?
阅读(2035) | 评论(0) | 转发(0) |
0

上一篇:euler25

下一篇:红黑树右旋伪代码

给主人留下些什么吧!~~