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

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,EDIT:而这将不起作用,并且因为genmask(3)必须给出0xffffffff00000000

最佳答案

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


Demo

只有4个值会在0-3范围内起作用。可以为它们每个编写一个单独的宏。

关于c - 生成位模式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36291483/

10-10 16:43