在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/