【发布时间】:2015-12-04 00:30:10
【问题描述】:
我试图解决一个问题,但我不知道这是否是好的解决方案。
构建一个 unsigned long 类型的掩码,将 14 个最低有效位(从右侧开始)设置为 1;
#include <stdio.h>
#include <stdlib.h>
unsigned long mask;
int main()
{
int i;
for(i=0;i<14;i++)
mask|=(1<<i);
printf("%li",mask);
return 0;
}
【问题讨论】:
-
有什么理由不写
0x3fff或0b0011'1111'1111'1111? -
避免循环的线索 - 如果你从一个恰好有 1 位设置为 1、所有其他位为零的数字中减去 1 会发生什么。
-
编辑你的original question 可能会更好(对于网站而言)
-
@5gon12eder:不使用
0b0011'1111'1111'1111的一个很好的理由是它是C 中的一个语法错误(而且,我认为,除了最新版本的C++)。 -
@5gon12eder:我实际上并没有说它更具可读性。