如何高效的找出32位的变量,哪一位是1,只要最前面的一个?
2012-03-31 10:01
323 查看
static inline int __ffs(int x)
{
int r = 0;
if (!x)
return 0;
if (!(x & 0xffff)) {
x >>= 16;
r += 16;
}
if (!(x & 0xff)) {
x >>= 8;
r += 8;
}
if (!(x & 0xf)) {
x >>= 4;
r += 4;
}
if (!(x & 3)) {
x >>= 2;
r += 2;
}
if (!(x & 1)) {
x >>= 1;
r += 1;
}
return r;
}
{
int r = 0;
if (!x)
return 0;
if (!(x & 0xffff)) {
x >>= 16;
r += 16;
}
if (!(x & 0xff)) {
x >>= 8;
r += 8;
}
if (!(x & 0xf)) {
x >>= 4;
r += 4;
}
if (!(x & 3)) {
x >>= 2;
r += 2;
}
if (!(x & 1)) {
x >>= 1;
r += 1;
}
return r;
}
相关文章推荐
- 一个全是32位整数的大数组,除了其中一个数字出现2次外,其余的数字都出现了3次。如何找出那个只出现了两次的数字?
- 新解:给定包含4 300 000 000个32位整数的顺序文件,如何找出一个至少出现两次的整数。
- 给定包含4300000000个32位整数的顺序文件,如何找出一个出现至少两次的整数
- 给两个变量,如何找出一个带环单链表中是什么地方出现环的
- 一个很大的数组,如何高效的把零都移到前面
- 如何成为一个高效的人
- 不同类如何共享同一个变量
- uefi 里面如何抓到一个变量
- J2EE面试题之 java如何找出一个int数组中出现次数最多的数字以及出现次数?
- 给定一个整数数组,找出两个下标,要求后面下标所指的数减去前面下标所指的数之差最大
- GTD:教你如何设置一个简单的个人高效系统
- 在shell中如何判断一个变量是否为空
- 百度面试题:一个单链表,长度未知,如何快速的找出位于中间的那个元素
- 如何判断一个操作系统是16位还是32位的?不能用sizeof()函数
- 高效工程师系列(一) 如何找到一个利于自己成长的环境
- 如何判断一个变量是否等于很多值中的一个?
- 如何确定一个变量是否为有符号型
- 如何在MFC类中声明一个.Net FrameWork变量--gcroot(from msdn)
- 一个1~n的自然数的乱序数组,其中缺失了1到n之间的某个数,如何快速找出这个数?
- php中如何把一个数字字符串作为一个变量