我正在尝试创建一个生成位模式的宏:
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
答案 0 :(得分:1)
#define genmask(x) ((unsigned long long)-1 / ((1LL << (1LL << (x)) * 4) + 1) << (4 * (1 << (x))))
只有4个值可以正常工作0-3。可以为每个宏编写一个单独的宏。