将数组的布尔值推送到 uint8 位域
Pushing boolean values of an array to uint8 bitfield
假设我有:
myArray[7] = {TRUE,FALSE,FALSE,TRUE,TRUE,FALSE,FALSE}
uint8 mybitfield;
使用 0=FALSE
、1=TRUE
将这些值 "push" 到 uint8 位域的最有效方法是什么
这样mybitfield表示为:
[1,0,0,1,1,0,0,0]
(不考虑最低有效位且始终为 0)。
谢谢!
由于 myArray
是某种通用整数类型,除了遍历数组中的所有项目之外别无他法,如果 TRUE 则将位 i
设置为 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;
}
这导致 0b10011000
,即数组的最高有效位在前,最低有效位隐式为零。
假设我有:
myArray[7] = {TRUE,FALSE,FALSE,TRUE,TRUE,FALSE,FALSE}
uint8 mybitfield;
使用 0=FALSE
、1=TRUE
这样mybitfield表示为:
[1,0,0,1,1,0,0,0]
(不考虑最低有效位且始终为 0)。
谢谢!
由于 myArray
是某种通用整数类型,除了遍历数组中的所有项目之外别无他法,如果 TRUE 则将位 i
设置为 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;
}
这导致 0b10011000
,即数组的最高有效位在前,最低有效位隐式为零。