gpt4 book ai didi

c - 如何有效地将位位置提取为C中的值

转载 作者:行者123 更新时间:2023-12-04 02:27:43 25 4
gpt4 key购买 nike

我正在寻找一种有效的(最好是宏)方法来提取位的位置并将其保存为 C 中的值。

data = 0x4000

会产生:

pos = 14

我正在读取的 16 位寄存器中只会设置一位。目前,我只是将数据与移位值进行比较以提取位置,但肯定有更好的方法我不知道。

我花了一些时间在这里搜索类似的问题,但找不到。

最佳答案

现代处理器只有一条指令来执行此操作(计算尾随零、查找第一个集合、计算前导零并查找最后一个集合)。在 gcc 和 clang 中,__builtin_ctz(n) 将返回数字中尾随零的数量。在支持单指令 ctz 的处理器上,它编译为一条指令。确保使用足够宽的函数(即 __builtin_ctz 用于 int 或更窄,__builtin_ctzl 用于 long int 或更窄, 或 __builtin_ctzll for long long int 或更窄。对于 16 位寄存器,__builtin_ctz 应该足够了。

参见 gcc documentationwikipedia获取更多信息。

关于c - 如何有效地将位位置提取为C中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66250586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com