Chinaunix首页 | 论坛 | 博客
  • 博客访问: 243057
  • 博文数量: 52
  • 博客积分: 1355
  • 博客等级: 中尉
  • 技术积分: 485
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-06 12:23
文章分类

全部博文(52)

文章存档

2013年(5)

2012年(16)

2011年(26)

2010年(2)

2009年(1)

2008年(2)

我的朋友

分类: C/C++

2011-12-07 11:44:33

解决办法描述:
分开处理int的4个byte,一个中0出现的位值通过查表得到:
  1. const char fzb[256] =
  2. {
  3.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  4.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  5.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  6.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  7.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  8.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  9.     1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2, // 140
  10.     2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, // 160
  11.     2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, // 180
  12.     2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3, // 200
  13.     3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, // 220
  14.     3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, // 240
  15.     5,5,5,5,5,5,5,5,6,6,6,6,7,7,8,0
  16. };

  17. int ffzb(int x){
  18.     int i,r,k;
  19.     r = fzb[(unsigned char)(x>>24)];
  20.     if(r){return r;}
  21.     r+=8;
  22.     i = fzb[(unsigned char)((x&0x00ff0000)>>16)];
  23.     if(i) { return r + i;}
  24.     r+=8;
  25.     i = fzb[(unsigned char)((x&0x0000ff00)>>8)];
  26.     if(i) { return r + i;}
  27.     r+=8;
  28.     i = fzb[(unsigned char)(x&0x000000ff)];
  29.     if(i) { return r + i;}
  30.     return 0;
  31. }
阅读(1216) | 评论(0) | 转发(0) |
0

上一篇:ListCtrl重绘某行

下一篇:oracle常用命令

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