You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++标准是否规定bool类型1字节存储的位值?比较逻辑如何?

C++ bool类型存储与比较的标准规定

关于bool类型的存储取值要求

C++标准明确要求bool类型的对象只能表示两个值:true和false。当bool对象被正确初始化或赋值为这两个值时,其1字节存储的内容只能是两种固定的8位值:

  • 对应false的是0x00(全0字节)
  • 对应true的是0x01(最低位为1、其余位为0的字节)

这是因为标准规定bool类型的对象表示、值表示与一个实现定义的无符号整数类型一致;同时bool与整数类型互相转换时,false必须转换为0,true必须转换为1,反过来非零整数转换为true、0转换为false,这就要求bool的存储值必须严格对应0和1的字节形式。

显式初始化的bool变量的存储规定

对于代码:

bool y = true;
bool n = false;

C++标准强制规定这两个变量的位内容:

  • 变量n的字节存储必须是0x00
  • 变量y的字节存储必须是0x01

关于bool类型的比较规则

如果bool变量处于未初始化状态,其存储值是不确定的(可能不是0或1),此时该变量与其他bool值或整数进行比较的结果是未定义的,程序可能出现不可预料的行为。

而对于已正确初始化/赋值的bool变量:

  • 两个bool变量之间的比较,直接基于它们的逻辑值(true或false),本质是比较存储的0或1字节值
  • bool与整数类型比较时,bool会先被提升为整数(true转1,false转0),再与整数进行数值比较

内容的提问来源于stack exchange,提问作者Enlico

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 14:46:00