zoukankan      html  css  js  c++  java
  • 实战ffs函数

    这个函数是返回整形的最低位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;
    }

  • 相关阅读:
    CentOS 7 搭建 LAMP
    CentOS 7 安装 nginx
    ms-sql关联表操作
    在CentOS下自动备份mysql
    Redhat 7 或者 CentOS 7 密码破解
    java环境变量的设置
    CentOS6.6安装及配置vsftpd文件服务器
    Virtualbox虚拟机配置CentOS7.0静态网络
    CentOS6.6安装vmware workstation报错
    CentOS6.6安装virtualbox4.1.44
  • 原文地址:https://www.cnblogs.com/pangblog/p/3265461.html
Copyright © 2011-2022 走看看