Code Bye

怎么用位运算得到一个数是几位的

也就是最高位的1在第几位,例如4就是0x100,3位,3就是0x11,2位,找了一圈没找到这个的算法啊
解决方案

15

#include <intrin.h>
_BitScanReverse
_BitScanReverse64
注意结果位序是0起始的。
good good study, day day up 

15

x86   BSF/BSR
ARM  CTZ/CLZ

5

《The Intel 64 and IA-32 Architectures Software Developer”s Manual》

5

汇编语言,X86有指令可用,C,C++ 可以直接嵌入汇编
C,C++本身,使用位运算:
//32Bits 用位运算
int Bitsof(unsigned x){
x =(x&0x55555555) +((x&0xAAAAAAAA)>>1);//错1位相加
x =(x&0x33333333) +((x&0xCCCCCCCC)>>2);//错2位相加
x=(x&0x0F0F0F0F) +((x&0xF0F0F0F0)>>4);//错4位相加
x=(x&0x00FF00FF) +((x&0xFF00FF00)>>8);//错8位相加
x=(x&0x0000FFFF) +((x&0xFFFF0000)>>16);//错16位相加
return x;
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明怎么用位运算得到一个数是几位的