在c语言中,我知道无符号字符的大小是1字节(=1个八位字节=8位),我知道无符号字符实际上是介于0和255之间的整数值,如果我有以下无符号字符变量:

unsigned char c = 255; //(this value can be any value from 0 to 255)

我怎样才能得到一个由8个元素组成的表,表示这个变量的每个位值(0或1)?(类似于这样:{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;
}

1 << i生成设置在第12、102、1002、10002等位置的二进制数。
运算符1使用i作为“掩码”,选择掩码值中标记为&的单个位。比较1 << i完成了这项工作,根据位的值产生0或1。
另一种方法是将c向右移动,并使用1进行掩蔽,如下所示:
int bits[8];
for (int i = 0 ; i != 8 ; i++) {
    bits[i] = (c >> i) & 1;
}

这与第一种方法类似,但掩蔽是在最低有效位位置进行的。
注意:在!= 0设置为8以外的数字的计算机上,这将只提取较低的8位。

关于c - 如何获取无符号字符的每一位的值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37487528/

10-11 21:32