假设我有一个包含7个元素的布尔数组
boolean myArray = {1,0,1,1,1,0,1}
我想在位域中表示的数组:
uint8 myBitfieldofmyArray;
将数组的最后一个元素设置为myBitfieldofmyArray中的最高有效位,这一点很重要。
不考虑最低有效位(位0),默认情况下始终为0。
通过以下解决方案,将1.element设置为最高有效位:
uint8_t myBitfieldofmyArray= 0;
for (int i = 0; i < 7; i++) {
myBitfieldofmyArray|= myArray[i] ? 1 : 0;
myBitfieldofmyArray<<= 1;
}
如何适应它,以便将最后一个元素设置为最高有效位?
上面的解决方案来自:
Pushing boolean values of an array to uint8 bitfield
最佳答案
您可以使用“反向循环”:
#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
int main() {
bool myArray[7] = {1, 0, 0, 1, 1, 0, 0};
uint8_t myBitfieldofmyArray= 0;
for (int i = 6; i >= 0; --i) {
myBitfieldofmyArray |= myArray[i];
myBitfieldofmyArray <<= 1;
}
printf("%d\n", myBitfieldofmyArray);
}
bool
的值为0或1,所以我认为三元? 1 : 0
不是必需的。关于c - 将 bool 数组的最后一个元素设置为位字段中的最高有效位,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59101470/