假设我有一个包含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/

10-12 14:12