怎么得到一个数的每个位c语言,怎么用位运算得到一个数是几位的

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

解决方案

15

#include 

_BitScanReverse

_BitScanReverse64

注意结果位序是0起始的。

good good study, day day up

e64326e2df5801589779cb58f3c81bb1.gif

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协议进行授权 , 转载请注明怎么用位运算得到一个数是几位的!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值