在c++中,
为什么布尔值是1字节而不是1位? 为什么没有4位或2位整数类型?
在为CPU编写模拟器时,我忽略了上述内容
在c++中,
为什么布尔值是1字节而不是1位? 为什么没有4位或2位整数类型?
在为CPU编写模拟器时,我忽略了上述内容
当前回答
即使最小大小可能是1字节,你可以在1字节上有8位布尔信息:
http://en.wikipedia.org/wiki/Bit_array
Julia语言有BitArray,我读过c++实现。
其他回答
因为CPU不能寻址任何小于字节的东西。
您可以使用位字段来获取子大小的整数。
struct X
{
int val:4; // 4 bit int.
};
尽管它通常用于将结构映射到精确的硬件预期位模式:
// 1 byte value (on a system where 8 bits is a byte)
struct SomThing
{
int p1:4; // 4 bit field
int p2:3; // 3 bit field
int p3:1; // 1 bit
};
即使最小大小可能是1字节,你可以在1字节上有8位布尔信息:
http://en.wikipedia.org/wiki/Bit_array
Julia语言有BitArray,我读过c++实现。
最简单的答案是;这是因为CPU以字节而不是位来寻址内存,按位的操作非常慢。
然而,在c++中可以使用位分配。对于位向量,有std::vector专门化,还有接受位大小条目的结构。
因为在一般情况下,CPU以1字节作为基本单位分配内存,尽管一些CPU如MIPS使用4字节字。
但是vector以一种特殊的方式处理bool类型,vector<bool>为每个bool类型分配一个位。