生成位模式

时间:2016-03-29 17:47:26

标签: c bit-manipulation bitwise-operators

我正在尝试创建一个生成位模式的宏:

genmask(1)提供0xff00ff00..

genmask(2)提供0xffff0000..

编辑:genmask(3)提供0xffffffff00000000

到目前为止,我有#define genmask(x) ((size_t)-1 / ((1 << 16 * (x)) - 1) * ((1 << 8 * (x)) - 1))

由于lhs&gt;而无效类型宽度,编辑:因为genmask(3)必须提供0xffffffff00000000

1 个答案:

答案 0 :(得分:1)

#define genmask(x) ((unsigned long long)-1 / ((1LL << (1LL << (x)) * 4) + 1) << (4 * (1 << (x))))

Demo

只有4个值可以正常工作0-3。可以为每个宏编写一个单独的宏。