lib_ffs 和 lib_ffsll 函数说明

lib_ffs 和 lib_ffsll 函数说明

一、函数作用

  lib_ffs 函数是获取一个 int 类型数据第一个 bit 为 的位。lib_ffsll 函数是获取一个 long long int 类型数据一个 bit 位 的位。

二、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 算法,获得最低位的 对应的值。然后根据在高 32 位还是低 32 位,调用 lib_ffs 查找这 32 位中第一个 bit 为 1 的位。 

这里提一下 x & -x 是咋算的,-x 的值是将 取反后 +1。如果 是偶数,取反后 +1 从最低位开始发送进位,直到 的那个位为 1才停止;如果 是奇数,取反后 +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) ...