博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ffs的另外一种实现方法
阅读量:4225 次
发布时间:2019-05-26

本文共 412 字,大约阅读时间需要 1 分钟。

 kernel中有个宏ffs,是用于从一个数中找出第一个为1的位(由低到高),为了提高效率,用了汇编指令实现。

static inline int fls(int x){	int ret;	if (__builtin_constant_p(x))	       return constant_fls(x);	asm("clz\t%0, %1" : "=r" (ret) : "r" (x));       	ret = 32 - ret;	return ret;}#define ffs(x) ({ unsigned long __t = (x); fls(__t & -__t); })

 

 

在其它应用中,由于不需要考虑效率问题,可以采用其他方式实现:

 

#define ffs(x) ({\	unsigned long i = 0;\	if(x == 0)\		i = 32;\	else {\		while((x & (1<

 

转载地址:http://fqbqi.baihongyu.com/

你可能感兴趣的文章
16.一级目录、历史命令,du,date,zip,快捷方式
查看>>
MySQL的基本管理
查看>>
MySQL 表结构与键值
查看>>
MySQL存储引擎,表记录管理
查看>>
Mysql多表查询语句,授权用户与密码更改
查看>>
MySQL 备份与恢复
查看>>
函数可重入性及编写规范
查看>>
想成为嵌入式程序员应知道的0x10个基本问题
查看>>
可重入函数与不可重入函数
查看>>
关于预处理器的学习
查看>>
Windows CE下操作GPIO的方法(以ARM9 S3C2410为例)
查看>>
s3c2410物理地址和虚拟地址空间
查看>>
VC中常用数据类型转换
查看>>
VC中常用类型转换2
查看>>
windows变量前缀总结(转载)
查看>>
UNICODE编程
查看>>
LPTSTR、LPCSTR、LPCTSTR、LPSTR的意义
查看>>
Visual C++中的ODBC编程
查看>>
AD590的引脚使用
查看>>
VC++工程文件下的各个文件说明
查看>>