在c++中,
为什么布尔值是1字节而不是1位? 为什么没有4位或2位整数类型?
在为CPU编写模拟器时,我忽略了上述内容
在c++中,
为什么布尔值是1字节而不是1位? 为什么没有4位或2位整数类型?
在为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位的bool型和4位和2位的int型。但这将导致一个奇怪的指令集,没有性能提升,因为这是一种不自然的方式来看待体系结构。“浪费”一个字节的大部分,而不是试图回收未使用的数据,实际上是有意义的。
根据我的经验,唯一一个把几个bool包进一个字节的应用程序是Sql Server。
考虑一下如何在模拟器级别实现这一点……
bool a[10] = {false};
bool &rbool = a[3];
bool *pbool = a + 3;
assert(pbool == &rbool);
rbool = true;
assert(*pbool);
*pbool = false;
assert(!rbool);
即使最小大小可能是1字节,你可以在1字节上有8位布尔信息:
http://en.wikipedia.org/wiki/Bit_array
Julia语言有BitArray,我读过c++实现。
字节是计算机中数字数据存储的较小单位。在计算机中,RAM有数百万个字节,每个字节都有一个地址。如果每个比特都有一个地址,那么计算机就可以少管理8倍的内存。
更多信息:维基百科
因为CPU不能寻址任何小于字节的东西。