如何解决一字节的布尔值为什么?
为什么布尔只需要一个字节就可以存储真或假,而只需要一位就可以
因为C ++中的每个对象都必须是可单独寻址的*(也就是说,您必须能够有一个指向它的指针)。您不能寻址单个位(至少不是在常规硬件上)。
使用以下内容更安全?
这是“安全的”,但并没有取得太大的成就。
上面的现场技术真的有帮助吗?
否,出于与上述相同的原因;)
但是编译器生成的用于访问它们的代码仍然比生成访问基元的代码更大,更慢。
是的,这是真的。在大多数平台上,这需要访问包含的字节(或int
任何其他字节),然后执行移位和位掩码操作以访问相关位。
如果您确实担心内存使用情况,可以使用std::bitset
C
++或BitSet
Java中的打包位。
*除少数例外。
解决方法
在C
++中,为什么布尔需要一个字节来存储true或false,而只需要一位就足够了,例如0代表false,1代表true?(为什么Java也需要一个字节?)
其次,使用以下方法更安全?
struct Bool {
bool trueOrFalse : 1;
};
第三,即使是安全的,上述现场技术真的有帮助吗?既然我听说我们在那里节省了空间,但是编译器生成的访问它们的代码仍然比生成访问基元的代码更大,更慢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。