![]() |
1
210
因为每个C++数据类型必须是可寻址的。 如何创建指向单个位的指针?你不能,但是你 可以 创建指向字节的指针。因此,C++中的布尔值通常是字节大小的。(也可能更大。这取决于实现。最主要的是它必须是可寻址的,所以没有C++数据类型可以比字节小。 |
![]() |
2
38
内存是字节可寻址的。如果不移动或屏蔽从内存中读取的字节,就无法寻址单个位。我想这是一个很大的原因。 |
![]() |
3
18
一
对内存的访问总是以“块”(多个单词,这是为了 硬件级别的效率 ,总线事务):在大多数CPU系统中,布尔位不能“单独”寻址。当然,一旦数据包含在 登记 ,通常有专门的指令来独立地操作位。
因此,使用
“比特包装”
为了提高使用“布尔”基数据类型的效率。一种技术,如
更新的
:由于一次精彩的讨论,我注意到
|
![]() |
4
6
关于8位是可寻址的最小内存量的答案是正确的。但是,有些语言 可以 在某种程度上,使用1位作为布尔值。我似乎记得帕斯卡将集合实现为位字符串。也就是说,对于以下集合:
您可能在内存中有这个:
当然,如果你想要的话,你可以在C/C++中做类似的事情。(如果你在跟踪一堆布尔人, 能够 有道理,但这取决于具体情况。) |
![]() |
5
1
我知道这是旧的,但我想我会投入我的2美分。 如果您将布尔值或数据类型限制为一位,那么您的应用程序将面临内存中断的风险。如何处理内存中只有一个位长的错误统计信息? 我去参加了一次面试,项目负责人对我说的一句话是:“当我们发送发射导弹的信号时,我们只需通过无线发送一个简单的一点开一点关。”发送一个比特的速度非常快,我们需要尽可能快的发送该信号。” 好吧,这是一个测试,看我是否理解概念、位、字节和错误处理。一个坏人发一点味精多容易啊。或者如果在传输过程中比特被反方向翻转会发生什么。 |
![]() |
6
1
一些嵌入式编译器具有用于位封装布尔标志的int1类型(例如用于微芯片MPU的c c s系列c编译器)。设置、清除和测试这些变量使用单指令位级指令,但编译器不允许任何其他操作(例如获取变量的地址),原因见其他答案。 |
![]() |
AstralHex · 矩阵乘法代码工作不正常 5 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 6 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 6 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 6 月前 |