在c中,我知道unsigned char的大小为1字节(= 1个八位字节= 8位),并且我知道unsigned char实际上是0到255之间的整数值,现在如果我有以下unsigned char变量:
unsigned char c = 255; //(this value can be any value from 0 to 255)
Run Code Online (Sandbox Code Playgroud)
如何获得包含 8 个元素的表,指示该变量的每个位值(0 或 1)?(像这样:{1, 1, 1, 1, 1, 1, 1, 1})有没有简单的方法可以在c中做到这一点?
在 C 中提取位的常见方法是使用位移操作:
int bits[8];
for (int i = 0 ; i != 8 ; i++) {
bits[i] = (c & (1 << i)) != 0;
}
Run Code Online (Sandbox Code Playgroud)
1 << i1生成在第 - 个位置设置的二进制数i,即 1 2、 10 2、 100 2、 1000 2等。
运算符&用作“掩码”,选择掩码值中标记的1 << i单个位。比较完成工作,根据位的值产生零或一。c1!= 0
另一种方法是c向右移动,并用 进行屏蔽1,如下所示:
int bits[8];
for (int i = 0 ; i != 8 ; i++) {
bits[i] = (c >> i) & 1;
}
Run Code Online (Sandbox Code Playgroud)
这与第一种方法类似,但屏蔽是在最低有效位位置完成的。
注意:在设置为 8 以外的数字的计算机上,CHAR_BIT这只会提取低 8 位。