gpt4 book ai didi

c - 使用 8 位整数作为标志掩码

转载 作者:行者123 更新时间:2023-12-02 07:17:39 25 4
gpt4 key购买 nike

我有 65 个不同的自定义数据结构标志(选项)。目前它看起来像这样:

struct CustomDataStruct {
int Something;
unsigned char Flags[9]
};

这样我最多可以存储 72 个标志(剩下 7 个,以防我决定添加更多)。我想为每个标志使用一个单独的位,所以我想到了这个:

void SetFlag(struct CustomDataStructure* Struct, int FlagNr) {
// Error checking and other stuff here
int index = FlagNr / 8; array.
Struct->Flags[index] |= 1 << (__________);

}

我已经尝试过 1 << (FlagNr % 8)但它没有设置正确的位。例如,我想打开标志 ID 23(从零开始),所以我调用 SetFlag(structInstance, 23) , 它正确地确定了索引 (Flags[2]),但是 23 % 8 = 7 , 和 1 << 7 = 1000 0000 (二进制),而不是正确的值,应该是 0000 0001 (打开数组的第 3 个 uchar 的最后一位,即第 24 位)。

标志必须存储在这个数组中,每一位代表标志开关。改变这不是一种选择。

最佳答案

位通常从最低有效位(最右边)开始索引,因为在大多数情况下这样更有意义。如果你想扭转它,就做 1 << (7 - FlagNr % 8)0x80 >> (FlagNr % 8) .

关于c - 使用 8 位整数作为标志掩码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56981815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com