Tag: 掩码

32位整数掩码

我正在完成一些CSE作业,我有一个关于声明更大比特大小的整数的快速问题。 我的任务是实现一个函数,如果x的任何奇数位为1(假设x的大小为32位),则返回1,否则返回0。 我允许声明一个具有位值的整数: 10101010101010101010101010101010 如果是这样,那么可能会出现任何问题吗? 如果没有,为什么不呢? 我有什么替代品? 我的function: int any_odd_one(unsigned x) { int mask = 10101010101010101010101010101010 if(x & mask) { return 1; } else { return 0; } } 在此先感谢您的任何帮助! -Matt

以下程序中的位掩码用法来自Programming Pearls

我今天开始阅读“Programming Pearls”,在进行练习时,我遇到了这个问题“你将如何实现自己的位向量?”。 当我查看解决方案时,它是这样的: #define BITSPERWORD 32 #define SHIFT 5 #define MASK 0x1F #define N 10000000 int a[1 + N/BITSPERWORD]; void set(int i) { a[i >> SHIFT] |= (1 << (i & MASK)); 我对这个陈述感到困惑的地方 1 << (i & MASK) 有人可以解释一下这里发生了什么吗?