gpt4 book ai didi

c - C 中的 MSB(最左边 1 位)索引

转载 作者:太空宇宙 更新时间:2023-11-04 03:42:29 25 4
gpt4 key购买 nike

如何从无符号整数 (uint16_t) 中获取最有意义的 1 位索引?

例子:

uint16_t x = // 0000 0000 1111 0000 = 240
printf("ffs=%d", __builtin_ffs(allowed)); // ffs=4

有一个函数 (__builtin_ffs) 从无符号整数返回最低有效 1 位 (LSB)。

我想要一些相反的东西,我想要一些返回 8 的函数应用于上面的例子。

备注:我尝试构建自己的函数,但我发现数据类型大小存在一些问题,这取决于编译器。

最佳答案

来自 GCC 手册 http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Other-Builtins.html :

  • Built-in Function: int __builtin_clz (unsigned int x)

Returns the number of leading 0-bits in x, starting at the most significant bit position. If x is 0, the result is undefined.

因此,最高设置位:

#define ONE_BASED_INDEX_OF_HIGHEST_SET_BIT(x) \
(CHAR_BIT * sizeof 1 - __builtin_clz(x)) // 1-based index!!

当心x == 0x<0 && sizeof(x)<sizeof 0虽然。

关于c - C 中的 MSB(最左边 1 位)索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27393269/

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