找出二进制数中bit为1的最(高/低)索引
2024-10-17 20:56:39
题1. 给定一个无符号整型数据(unsigned int),找出其对应二进制数据中bit位为1的最高/低索引。
比如:对于数据0,返回0;数据1,返回1;数据0x80000000,返回32;
题2. 给定一个无符号64bit整型数据(unsigned long long int),找出其对应二进制数据中bit位为1的最高/低索引。
比如:对于数据0,返回0;数据1,返回1;数据0x4000000000000000,返回63;
题3. 给定一个无符号长整型数据(unsigned long int),找出其对应二进制数据中bit位为1的最高/低索引。
>对于题1:
/*
方法一:二分法
*/
int fls(unsigned int x)
{
int r=;
if(!x)
return ;
if(!(x&0xffff0000u)){
x<<=;
r-=;
}
if(!(x&0xff000000u)){
x<<=;
r-=;
}
if(!(x&0xf0000000UL)){
x<<=;
r-=;
}
if(!(x&0xc0000000UL)){
x<<=;
r-=;
}
if(!(x&0x80000000UL)){
x<<=;
r-=;
}
return r;
}
/*
方法二:遍历法
*/
int fls(unsigned int x)
{
int i,pos=0;
for(i=1;i<=32;++i){
if(x&0x1)
pos=i;
x>>=1;
}
return pos;
}
>对于题2:
unsigned long long int为64bit数据,借助题1实现
int fls_64(unsigned long long int x)
{
unsigned int _x= x>>;
if(_x)
return fls(_x)+;
return fls(x);
}
>对于题3:
由于unsigned long int类型的size会根据编译器的不同而不同,所以应该考虑无符号长整型为8byte和4byte的情况。总和题1/2
int fls_long(unsigned long int x)
{
if (sizeof(x) == 4)
return fls(x);
return fls_64(x);
}
欢迎大家批评指正 |;-)
最新文章
- 修改USB固件库的Customer_HID例程
- html5实现摇一摇功能
- HttpClient示例
- iOS项目立项
- php pdo分页
- java面向对象编程--第九章 多态和抽象
- 右键菜单添加程序,指定图标, Notepad2、Sublime Text 2
- [Hapi.js] Replying to Requests
- eclipse 异常Unhandled event loop exception
- es6语法
- 对于mariadb安装后可以默认使用无密码登录的问题解决方案
- dubbo负载均衡策略及对应源码分析
- Python - 使用objgraph生成对象引用关系图
- mysql使用自增Id为什么存储比较快
- Codeforces Round #349 (Div. 1)E. Forensic Examination
- Linux命令中:rsync和cp之间的区别
- PhotoShop CS6 在2K屏幕下标题菜单等字体太小
- C++11 long long使用及输出
- 转载 URL短地址压缩算法
- chrome不能用百度网盘极速上传插件的解决办法
热门文章
- 单片机模块化程序: 单片机加入JSON是个不错的选择
- SQLSERVER获取数据库中的所有表的名称、表中所有字段的属性
- FPGA综合的约束
- mac 以多tab的方式打开
- Spark 部署即提交模式意义解析
- nginx 访问控制之 document_uri
- nginx rewrite实战实例
- GET /static/css/bootstrap.min.css.map HTTP/1.1"; 404
- Web Components 入门实例教程
- python 项目实战之装饰器