我试图解决一个问题,但我不知道这是不是一个好的解决方案.
构建一个unsigned long类型的掩码,将14个最低有效位(从右侧)设置为1;
#include#include unsigned long mask; int main() { int i; for(i=0;i<14;i++) mask|=(1<
Solaine Char.. 8
这个比较好
#include#include unsigned long mask; int main() { int num = 14; mask = (1 << num) - 1; printf("%lu", mask); return 0; } 这
num
是最低有效位的总数.这个怎么运作
2 ^ 14 = 16348的二进制表示是
0000000000000000 0100000000000000?
(在32位)和二进制表示2 ^ 14-1 = 16347是
0000000000000000 0011111111111111?
因此,14个最低有效位设置为1.
1> Solaine Char..:这个比较好
#include#include unsigned long mask; int main() { int num = 14; mask = (1 << num) - 1; printf("%lu", mask); return 0; } 这
num
是最低有效位的总数.这个怎么运作
2 ^ 14 = 16348的二进制表示是
0000000000000000 0100000000000000?
(在32位)和二进制表示2 ^ 14-1 = 16347是
0000000000000000 0011111111111111?
因此,14个最低有效位设置为1.
@DariusIonut相同的原因1,000 - 1是999.如果你想要基数10的N 9,你取(10 ^ N)-1.如果你想在基数为2的N 1,你取(2 ^ N)-1.
因为掩码是`unsigned long`所以它应该用'%lu`打印.
由于OP要求构建位掩码,而不是打印它,所以作为评论会更好.(如果问题不那么模糊,那甚至都不是答案.)
@DariusIonut如果你需要左边的位,我会给你一个提示:`~`