gpt4 book ai didi

c++ - 如何将 int 用作 ints/bools 数组?

转载 作者:搜寻专家 更新时间:2023-10-31 00:05:25 24 4
gpt4 key购买 nike

我在制作程序时注意到我的很多 int类型变量从未超过十个。我认为这是因为 int最短为 2 个字节(如果算上 char 则为 1 个字节),所以我应该能够存储 4 个 unsigned ints在一个 short int 中的最大值为 15,我知道我可以使用 >> 单独访问每个值和 << :

short unsigned int SLWD = 11434;
S is (SLWD >> 12), L is ((SLWD << 4) >> 12),
W is ((SLWD << 8) >> 12), and D is ((SLWD << 8) >> 12)

但是,我不知道如何将它包含在类的函数中,因为任何类型的 GetVal()函数必须是 int 类型,这首先违背了隔离位的目的。

最佳答案

首先,记住 Rules of Optimization .但这在 C 或 C++ 中使用位域是可能的:

struct mystruct {
unsigned int smallint1 : 3; /* 3 bits wide, values 0 -- 7 */
signed int smallint2 : 4; /* 4 bits wide, values -8 -- 7 */
unsigned int boolean : 1; /* 1 bit wide, values 0 -- 1 */
};

值得注意的是,虽然您因不需要那么多存储空间而获得 yield ,但您也有损失,因为访问所有内容的成本变得更高,因为现在每次读取或写入都有一堆与之相关的微调机制。鉴于存储很便宜,可能不值得。

编辑:您也可以使用 vector<bool>存储 1 位 bool 值;但要小心它,因为它不像普通的 vector !特别是,它不提供迭代器。它完全不同,可以公平地说 vector<bool>实际上不是 vector . Scott Meyers 在“Effective STL”中就此主题写得非常清楚。

关于c++ - 如何将 int 用作 ints/bools 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2339027/

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