作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在制作程序时注意到我的很多 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/
我是一名优秀的程序员,十分优秀!