我正在尝试创建一个生成位模式的宏,如下所示:
genmask(1)
给出0xff00ff00..
genmask(2)
给出0xffff0000..
编辑:genmask(3)
给出0xffffffff00000000
到目前为止我有#define genmask(x) ((size_t)-1 / ((1 << 16 * (x)) - 1) * ((1 << 8 * (x)) - 1))
由于 lhs > 类型宽度而无法工作,编辑:并且因为 genmask(3)
必须给0xffffffff00000000
最佳答案
#define genmask(x) ((unsigned long long)-1 / ((1LL << (1LL << (x)) * 4) + 1) << (4 * (1 << (x))))
只有 4 个值适用于 0-3。可以为它们每个编写一个单独的宏。
关于c - 生成位模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36291483/