生成位模式

Generate bit pattern

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

genmask(1) 给出 0xff00ff00..

genmask(2) 给出 0xffff0000..

编辑:genmask(3) 给出 0xffffffff00000000

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

由于 lhs > type width,这将不起作用,编辑:并且因为 genmask(3) 必须给出 0xffffffff00000000

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

Demo

只有 4 个值 0-3 有效。可以为它们中的每一个编写一个单独的宏。