在c++中,
为什么布尔值是1字节而不是1位? 为什么没有4位或2位整数类型?
在为CPU编写模拟器时,我忽略了上述内容
在c++中,
为什么布尔值是1字节而不是1位? 为什么没有4位或2位整数类型?
在为CPU编写模拟器时,我忽略了上述内容
当前回答
因为字节是语言中最小的可寻址单位。
但是你可以让bool值为1位,如果你有很多 如。在结构体中,像这样:
struct A
{
bool a:1, b:1, c:1, d:1, e:1;
};
其他回答
考虑一下如何在模拟器级别实现这一点……
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倍的内存。
更多信息:维基百科
bool can be one byte -- the smallest addressable size of CPU, or can be bigger. It's not unusual to have bool to be the size of int for performance purposes. If for specific purposes (say hardware simulation) you need a type with N bits, you can find a library for that (e.g. GBL library has BitSet<N> class). If you are concerned with size of bool (you probably have a big container,) then you can pack bits yourself, or use std::vector<bool> that will do it for you (be careful with the latter, as it doesn't satisfy container requirments).
因为CPU不能寻址任何小于字节的东西。