gpt4 book ai didi

c - 位掩码 - 左移溢出

转载 作者:行者123 更新时间:2023-11-30 16:23:47 26 4
gpt4 key购买 nike

问题:我想根据给定的长度生成一个位掩码(uint32_t)。应达到以下结果:

BIT_MASK(3) =  0x00..0111 
BIT_MASK(32) = 0x111..111

下面给出的代码适用于小于 32 的每个长度。如果长度为 32,则左移计数大于类型宽度(溢出)。

#define BIT(n)                  ( 1<<(n) )
#define BIT_MASK(len) ( BIT(len)-1 )

uint32_t length;
uint32_t mask = BIT_MASK(length);

问题:是否有任何其他有效的宏解决方案来生成位掩码,其中不包括额外的 if/else 或类型转换以避免该错误。

最佳答案

差不多就是这样,但是您需要将文字 1 更改为 1UL。否则,您将被限制在 int 的范围内,这可能是 31 位而不是 32 位。

#define BIT_MASK32(n) ( (1UL<<(n)) - 1UL )

其中 n 必须在 0 到 31 的范围内才能适合 uint32_t。为了防止溢出,您可以将其设置为 (n)%32,但如果 n 是运行时值而不是整数常量,这会使宏变慢.

关于c - 位掩码 - 左移溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53882538/

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