C 将布尔数组的最后一个元素设置为位字段中的最高有效位

C 将布尔数组的最后一个元素设置为位字段中的最高有效位,c,bit-fields,C,Bit Fields,假设有一个布尔数组,包含7个元素,如 boolean myArray = {1,0,1,1,1,0,1} 我要在位字段中表示的数组: uint8 myBitfieldofmyArray; 将数组的最后一个元素设置为myBitfieldofmyArray中的最高有效位非常重要。 不考虑最低有效位(位0),默认情况下始终为0 使用以下解决方案,1.1元素被设置为最高有效位: uint8_t myBitfieldofmyArray= 0; for (int i = 0; i < 7; i++

假设有一个布尔数组,包含7个元素,如

boolean myArray = {1,0,1,1,1,0,1}
我要在位字段中表示的数组:

uint8 myBitfieldofmyArray;
将数组的最后一个元素设置为myBitfieldofmyArray中的最高有效位非常重要。 不考虑最低有效位(位0),默认情况下始终为0

使用以下解决方案,1.1元素被设置为最高有效位:

uint8_t myBitfieldofmyArray= 0;
for (int i = 0; i < 7; i++) {
    myBitfieldofmyArray|= myArray[i] ? 1 : 0;
    myBitfieldofmyArray<<= 1;
}
uint8\u t myBitfieldofmyArray=0;
对于(int i=0;i<7;i++){
myBitfieldofmyArray |=myArray[i]?1:0;
myBitfieldofmyArray您可以使用“反向循环”:

#包括
#包括
#包括
int main(){
布尔myArray[7]={1,0,0,1,1,0,0};
uint8_t myBitfieldofmyArray=0;
对于(int i=6;i>=0;--i){
myBitfieldofmyArray |=myArray[i];

myBitfieldofmyArray如果要从MSB开始存储位字段,可以将循环更改为:


for(int i=0;i一种简单的方法是使用两个计数器将位从
array[0]
开始的数组循环移位到
uint8
中的位,从MSB开始,增加数组索引,同时减少位位置,例如

    uint8_t myBitfieldofmyArray = 0, i = 7, j = 0;

    while (i--)
        myBitfieldofmyArray |= myArray[j++] << (i + 1);
uint8\u t myBitfieldofmyArray=0,i=7,j=0;
而(我--)
myBitfieldofmyArray |=myArray[j++]
    uint8_t myBitfieldofmyArray = 0, i = 7, j = 0;

    while (i--)
        myBitfieldofmyArray |= myArray[j++] << (i + 1);