位操作
文章平均质量分 84
C 语言位操作
tyustli
不抛弃,不放弃
展开
-
【位运算】——根据(mask, vavlue)键值对,生成对应的整数
用于根据传入的 mask 和对应的值,生成整数,未指定的 mask 位清零。结果打印解析,,,, 这些前面都单独解析过,参考 宏连接为什么使用两级,而不直接用当直接 时候, 传入的是 和 而 对宏参数起作用,那宏直接将 和 连接,结果就是 所以当 的级数和 要一致,才能达到宏连接的效果将宏参数 x 和 y 分开,在这里 x 一般为 ,y 为 所以最终的效果就是 设置对应的 mask 值为 v。如果存在多个 mask 位,从第一个置位的 mask 开始没有设置的 mask 位值为 0将原创 2023-07-28 08:27:28 · 198 阅读 · 0 评论 -
【位操作】——计算后导0的个数
这段代码的作用是使用ARM指令集中的 rbit 和 clz 指令来计算输入值 x`的二进制表示中末尾零的数量。请注意,这段代码的实现依赖于特定的ARM架构和编译器,具体的实现细节可能因平台和编译器的不同而有所不同。“clz %0, %0” :这是另一个汇编指令,使用 clz 指令计算反转后的值中前导零的数量。%0 表示输入和输出操作数,因为反转后的值在此时已经存储在了 %0 中。`“rbit %0, %1\n\t” :这是一个汇编指令,使用 rbit 指令将输入值 x 的位序反转。原创 2023-07-27 14:01:04 · 304 阅读 · 0 评论 -
【位操作】——计算前导0的个数
需要注意的是, clz 指令在RISC-V指令集的标准扩展中是可选的,具体支持与否取决于所使用的处理器实现和指令集扩展。因此,在编写程序时,建议查阅相关的RISC-V架构和处理器文档,以确保所使用的指令集支持 clz 指令。RISC-V 指令集中的 clz 指令用于计算一个无符号整数的二进制表示中从最高有效位(MSB)开始的连续零的数量,即前导零的个数。需要注意的是, __builtin_clz 函数的行为在不同的编译器和处理器架构上可能会有所不同。返回 x 的二进制下前导的 0 的个数,原创 2023-07-27 12:52:33 · 2081 阅读 · 0 评论 -
【位操作】——获取整数变量最低位为 1 的位置
这个宏通过对变量 y 进行一系列的位与运算和三元运算符嵌套,来判断最低位的位置。它从最低位开始,依次检查每一位是否为 1,如果是 1,则返回相应的位置;如果不是,则进入下一位的判断,直到找到最低位的位置。如果所有位都为 0,则返回 32。原创 2023-07-26 22:24:19 · 747 阅读 · 0 评论 -
【位操作】——获取整数变量最高位为 1 的位置
在这个示例中, BIT_HIGH_BIT 宏被用于计算变量 num 的最高位为 1 的位置。根据二进制表示, num 的最高位为 1 的位置是第 3 位,因此输出的结果为。下面是一个示例,展示如何使用 BIT_HIGH_BIT 宏。原创 2023-07-26 22:28:16 · 1296 阅读 · 0 评论 -
【位操作】——常用位操作
我们使用 BM_IS_SET(num, mask) 宏来检查 num 中的第 1 位和第 2 位是否被设置。在这个示例中,我们定义了宏 BM_CLR 用来将指定的位掩码清除为 0。在这个示例中,我们定义了宏 BM_IS_SET 来检查变量 num 中由 mask 指示的位是否被设置。总之, BIT(n) 宏用于生成一个在指定位置上为 1 的整数,可以用于位运算中的设置、清除和检查特定位的操作。我们使用 BM_IS_CLR(num, mask) 宏来检查 num 中的第 1 位和第 2 位是否被清除。原创 2023-07-26 21:53:23 · 518 阅读 · 0 评论