在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
};
其他回答
从维基百科:
从历史上看,字节是的数字 用于编码单个字符的位 电脑里的文本,的确如此 因此,基本可寻址 许多计算机中的元件 架构。
因此字节是基本的可寻址单位,低于它计算机体系结构不能寻址。由于(可能)不存在支持4位字节的计算机,所以没有4位bool等。
然而,如果你可以设计这样一个体系结构,它可以将4位作为基本可寻址单位,那么你将拥有大小为4位的bool值,只在那台计算机上!
因为CPU不能寻址任何小于字节的东西。
最简单的答案是;这是因为CPU以字节而不是位来寻址内存,按位的操作非常慢。
然而,在c++中可以使用位分配。对于位向量,有std::vector专门化,还有接受位大小条目的结构。
你可以有1位的bool型和4位和2位的int型。但这将导致一个奇怪的指令集,没有性能提升,因为这是一种不自然的方式来看待体系结构。“浪费”一个字节的大部分,而不是试图回收未使用的数据,实际上是有意义的。
根据我的经验,唯一一个把几个bool包进一个字节的应用程序是Sql Server。
因为字节是语言中最小的可寻址单位。
但是你可以让bool值为1位,如果你有很多 如。在结构体中,像这样:
struct A
{
bool a:1, b:1, c:1, d:1, e:1;
};