C 将数组的布尔值推送到uint8位字段
让我们假设我有:C 将数组的布尔值推送到uint8位字段,c,bit-fields,C,Bit Fields,让我们假设我有: myArray[7] = {TRUE,FALSE,FALSE,TRUE,TRUE,FALSE,FALSE} uint8 mybitfield; 使用0=FALSE,1=TRUE将这些值“推送”到uint8位字段的最有效方法是什么 因此,mybitfield表示为: [1,0,0,1,1,0,0,0] (不考虑最低有效位,它将始终为0) 谢谢 如果myArray是一种通用的整数类型,那么除了遍历数组中的所有项之外,没有其他方法,如果为TRUE,则使用bitfield |=
myArray[7] = {TRUE,FALSE,FALSE,TRUE,TRUE,FALSE,FALSE}
uint8 mybitfield;
使用0=FALSE
,1=TRUE
将这些值“推送”到uint8位字段的最有效方法是什么
因此,mybitfield表示为:
[1,0,0,1,1,0,0,0]
(不考虑最低有效位,它将始终为0)
谢谢 如果
myArray
是一种通用的整数类型,那么除了遍历数组中的所有项之外,没有其他方法,如果为TRUE,则使用bitfield |=1u设置位i
,如前所述,您必须逐个遍历位,例如:
int myArray[7] = {TRUE,FALSE,FALSE,TRUE,TRUE,FALSE,FALSE};
uint8_t bitfield = 0;
for (int i = 0; i < 7; ++i) {
bitfield |= myArray[i] ? 1 : 0;
bitfield <<= 1;
}
intmyarray[7]={TRUE,FALSE,FALSE,TRUE,TRUE,FALSE,FALSE};
uint8_t位字段=0;
对于(int i=0;i<7;++i){
位域|=myArray[i]?1:0;
位域抱歉。这是一个错误。现在已经更正了。除了循环和在mybitfield
中设置位之外,真的没有其他方法。这是因为单个位无法寻址。位的顺序是模糊的。myArray[0]
位1还是位7?(假设LSB是位0)现在已经更正了顺序。所以myArray[0]是最高有效位。在上面的示例中,它是“1”讽刺的是,C语言是嵌入式的首选语言,但它甚至没有位的概念谢谢你的回答!我想知道如果我想在这种情况下将数组的最后一个元素设置为最重要的位,需要什么操作?@JohnDoe以相反的顺序迭代数组。或者删除(如果TRUE
为1
且FALSE
为0
,也可以删除三元运算符?:
)