【发布时间】:2018-12-21 09:50:11
【问题描述】:
问题: 我想根据给定的长度生成一个位掩码(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 或类型转换以避免该错误。
【问题讨论】: