c - 生成位模式

标签 c bit-manipulation bitwise-operators

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

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))))

Demo

只有 4 个值适用于 0-3。可以为它们每个编写一个单独的宏。

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

相关文章:

java - 01001001的算术左移是什么?

c++ - 第二个条件中的 i & (1<<j)) 是什么意思?

java - Java String 之间的按位运算符

c - 关于我对first fit malloc function的做法的意见和建议

简单 PUB/SUB 应用程序中的 Czmq 内存泄漏

c - 如何在非规范模式下从读取函数返回且 VMIN 和 TIME 不等于零

c++ - 通过指针进行最快可移植访问的 c/c++ 数据类型?

java - 如果值不适合则设置字节

MySQL位反转,如何只取反前x位?

assembly - x86 asm 中 NOT 指令的简单示例