这个函数是返回整形的最低位1的位置
自己写是这个样子的:
/* Find the first bit set in I. */
int lx_ffs(int i)
{
int index = 0, ret = -1;
for(index = 0; index < sizeof(int) * 8; index ++)
{
if((1 << index) & i)
{
ret = index + 1;
break;
}
} return ret;
}


人家库函数牛B,比较一次就可以得到
其工作原理
1=>位置1
2=>位置2
4=>位置3
8=>位置4
16=>位置5
32=>位置6
64=>位置7
128=>位置8
在得到最低位1的整数值后,根据数值得到所在位置
/* Find the first bit set in I. */
int lx_ffs(int i)
{
static const unsigned char table[] =
{
0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8
};
unsigned int a;
unsigned int x = i & -i;//这一步直接得到最低位1的整数值 a = x <= 0xffff ? (x <= 0xff ? 0 : 8) : (x <= 0xffffff ? 16 : 24); return table[x >> a] + a;
}
												

最新文章

  1. Ubuntu安装Svn,提供http访问
  2. js检测浏览器是否支持某属性
  3. popwindow设置背景半透明
  4. R6010 - abort() has been called 错误
  5. JS:采摘自JS精粹
  6. ECSHOP验证码背景图修改教程
  7. 如何从NFS文件系统启动
  8. Codeforces Round #197 (Div. 2) : C
  9. All X(思维)
  10. 开发指南专题八:JEECG微云高速开发平台数据字典
  11. Xcode中Groups和Folder的区别
  12. java基础- Collection和map
  13. HDU 4547 CD操作
  14. mysql 5.6升级到5.7.22
  15. Collections.sort 的日期排序
  16. java服务端的 极光推送
  17. Android SDK Manager 无法打开
  18. Oracle11g温习-第十六章:用户管理
  19. db2创建数据库
  20. auto

热门文章

  1. Linux下Redis的安装、配置操作说明
  2. 浙江大学PAT上机题解析之5-05. QQ帐户的申请与登陆
  3. php实现文件夹下的文件读取功能
  4. Zend Framework学习日记(1)--环境搭建篇(转)
  5. 转载——SQL Server数据库性能优化之SQL语句篇
  6. ORA-25153: Temporary Tablespace is Empty解决方法
  7. Mysql的Error 1364
  8. 使用DataSet数据集插入记录
  9. easyui之combobox(不定时补充)
  10. [Unity优化] Unity CPU性能优化