为什么布尔值只需要一个位时就作为字节存储在计算机中


32

我最近开始学习编写代码,在我的书中遇到了这个问题。“为什么当布尔值只需要一位时,为什么将其作为字节存储在计算机中?” 有人可以进一步阐明这个问题吗?


10
严格来说,这不是真的。如果将某些位捆绑在单个字节中,则某些语言(例如C / C ++)提供了将布尔值存储为单个位的方法。换句话说,在C语言中,您可以在一个字节中存储八个布尔值。但是很少有人使用它,因为内存便宜并且处理器以8/16/32/64位块的形式处理数据。
破坏了机器人

这个类似问题的答案就是您应该看到的!您将在那里获得大量参考...干杯!
2013年


Answers:


49

它与CPU可以轻松解决的问题有关。例如,在x86处理器上,有一个eax(32位),ax(16位)和一个ah(8位),但没有单个位寄存器。因此,为了使其使用单个位,CPU将必须执行读/修改/写操作以更改该值。如果将其存储为字节,则可以使用一次读取或写入来检查/更改该值。

另外,人们可能会想,使用单个位还是要使用一个完整的字节会更好,毕竟所有字节都将浪费7位。除非空间是一个约束,否则应该使用字节,因为至少x86和我认为其他人,通常会有一条指令来快速设置/清除布尔值,这比单个位的读取/修改/写入要快得多。 。通过个人测量,我已经看到读/修改/写方法比单指令方法慢5倍。


6
您唯一缺少的单词是“边界对齐”。
Manoj R

3
另一方面,我发现使用单个位的速度提高了2倍,这大概是由于较小的数据集可以更好地使用缓存。
Michael Borgwardt 2013年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.