生成位模式
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))))
只有 4 个值 0-3 有效。可以为它们中的每一个编写一个单独的宏。
我正在尝试创建一个生成位模式的宏:
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))))
只有 4 个值 0-3 有效。可以为它们中的每一个编写一个单独的宏。