解决办法描述:
分开处理int的4个byte,一个中0出现的位值通过查表得到:
- const char fzb[256] =
- {
- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
- 1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2, // 140
- 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, // 160
- 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, // 180
- 2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3, // 200
- 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, // 220
- 3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, // 240
- 5,5,5,5,5,5,5,5,6,6,6,6,7,7,8,0
- };
- int ffzb(int x){
- int i,r,k;
- r = fzb[(unsigned char)(x>>24)];
- if(r){return r;}
- r+=8;
- i = fzb[(unsigned char)((x&0x00ff0000)>>16)];
- if(i) { return r + i;}
- r+=8;
- i = fzb[(unsigned char)((x&0x0000ff00)>>8)];
- if(i) { return r + i;}
- r+=8;
- i = fzb[(unsigned char)(x&0x000000ff)];
- if(i) { return r + i;}
- return 0;
- }
阅读(1216) | 评论(0) | 转发(0) |