我正在尝试创建一个生成如下位模式的宏: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/