lib_ffs 和 lib_ffsll 函数说明
lib_ffs 和 lib_ffsll 函数说明
一、函数作用
lib_ffs
函数是获取一个
int
类型数据第一个
bit
为
1
的位。
lib_ffsll
函数是获取一个
long long int
类型数据一个
bit
位
1
的位。
二、
lib_ffs
函数
lib_ffs 函数
是将
int
类型数据强转为
unsigned int
类型进行运算。
archFindLsb函数,先比较低 16 位和高 16 位,哪个先有 1;然后再比较那 16 位的低 8 位和高 8 位,哪个先有 1;最后再查表获得第一个bit为1的位。
二、
lib_ffsll
函数
lib_ffs 函数
是将
int
类型数据强转为
unsigned int
类型进行运算。
通过
x & -x
算法,获得最低位的
1
对应的值。
然后根据在高 32 位还是低 32 位,调用 lib_ffs 查找这 32 位中第一个 bit 为 1 的位。
这里提一下
x & -x
是咋算的,
-x
的值是将
x
取反后
+1
。如果
x
是偶数,取反后
+1
从最低位开始发送进位,直到
x
的那个位为
1
才停止;如果
x
是奇数,取反后
+1
的最低位是
1
。
Related Articles
SylixOS 设置进程亲和度
Q:SylixOS 线程绑定到指定CPU核运行 sched_setaffinity 函数亲和指定进程内所有线程在指定 cpu 集上运行,该函数只用于多核情况。 使用方法是先使用 sched_setaffinity 或 pthread_setaffinity_np 将某些线程或进程绑定到某个核上,然后再调用 sched_cpuaffinity_enable_np 使能强亲和。 详见《SylixOS 应用开发手册》第8章 ...
wireshark抓包大小显示超过mss大小
Q:调试emac的时候抓包 ftp 数据,发现数据包的长度大于设置的 MTU 和 MSS 大小,这样不利于分析数据包的传输情况。 解决办法: step1:打开网络适配器的属性界面,点击【配置】 step2:关闭大量传递减负 v2(IPV4)这个选项 这样再使用wireshark抓包,抓到每个包的最大大小显示就正常了
如何登录和退出 SylixOS
登录和退出 SylixOS? 1、连接方式 SylixOS 支持 Telnet 和 Console 方式登录 SylixOS 2、登录工具 Telnet 和 Console工具可以使用 Putty,XShell、SecureCRT等工具。 3、SylixOS 设备 SylixOS 设备可以是虚拟机设备,也可以是物理设备。 4、登录步骤 1)输入设备IP地址,开始连接,如设备正常连通,则会提示输入用户名和密码, 如无法连接,请使用 ping 命令检查设备网络。 ...
SylixOS 系统调用原理和调用过程在哪里查看?还分用户态和内核态么?
问:SylixOS 系统调用原理和调用过程在哪里查看?还分用户态和内核态么? 答:标准版 SylixOS 不支持系统调用, 直接通过函数的方式直接访问的。系统调用是会影响系统实时性的,尤其切换页表,很耗时间。 SylixOS 不区分用户态和内核态,内核安全问题我们有容器的解决方案,容器是涉及到系统调用的!
RealEvo-IDE导入导出环境和设备配置
RealEvo-IDE 集成开发环境,是基于 Eclipse 开源软件开发和定制,很多IDE环境的设置操作可以参照 Eclipse 下的方法。 以下介绍关于导入导出环境和设备配置的方法: 1、环境配置的导入和导出 1)导出操作 2)导入操作 示例的配置文件中设置了“显示特殊字符”、“在固定的列显示竖线”,效果如下: 2、设备配置的导入和导出 1)导出操作 2)导入操作 或者 参考资料 1、RealEvo-IDE 使用手册 (zoho.com.cn) ...