0

考虑到没有BOOL数据类型之类的东西,请采取以下措施:

std::cout << (1>2); //<<-- prints 0

假设这个错误比较是 0,那么比较结果会减少到什么数据类型 deos?进行快速谷歌搜索不会产生任何结果。我最好的猜测是它是一个,unsigned char因为它是最小的最基本数据类型,其中 0 真正表示为0x00. 我不想假设任何事情,因为我不确定 voodoostd::cout对值做了什么以使其成为可打印字符。

4

4 回答 4

10

所有关系运算符 ( <, >, <=, >=) 的结果类型为bool

运算符<(小于)、>(大于)、<=(小于或等于)和>=(大于或等于)都产生falsetrue。结果的类型是bool

类型的对象bool具有值trueor 。false在整体提升下, abool可以转换为intwherefalse成为0true成为1

类型的纯右值bool可以转换为类型的纯右值intfalse变为零和true变一。

bool是一个整数类型,标准说它是通过使用“纯二进制计数系统”来表示的。描述此表示的脚注还不清楚它如何映射到值truefalse,但您可以假设它们暗示 的值表示0将是所有0位:

整数的位置表示,它使用二进制数字 0 和 1,其中由连续位表示的值是相加的,从 1 开始,并乘以 2 的连续整数幂,可能最高位置的位除外。(改编自美国国家信息处理系统词典。)

于 2013-01-17T21:59:08.147 回答
6

没有标准BOOL类型,而是bool标准的基本类型:

[C++11: 3.9.1/6]:typebool的值为truefalse[..]

至于你的关系比较的结果:

[C++11: 5.9/1]:关系运算符从左到右分组。[..]操作数应具有算术、枚举或指针类型,或 type std::nullptr_t。运算符<(小于)、>(大于)、<=(小于或等于)和>=(大于或等于)都产生falsetrue结果的类型是bool

请注意,这在 C 中是不同的,其中没有内置类型bool,并且关系比较的结果是类型int

[C99: 6.5/8]:如果指定的关系为真且为假,则每个运算符<(小于)、>(大于)、<=(小于或等于)和>=(大于或等于)都应产生。结果有类型10int

于 2013-01-17T21:58:58.460 回答
2

C++ 标准,第 5.9 节关系运算符,第 1 段说:

结果的类型是bool

于 2013-01-17T21:59:37.520 回答
0

这不是您问题的直接答案:

正如这里所说,它是 c++ 中的 bool 和 c 中的 int 但你我认为你会想到的部分是保存比较结果需要多少内存?

  • 如您所知,数据类型定义了要分配的内存量。

  • 注意:有时它(数据类型到内存大小定义)与编译器/处理器架构不同,例如在嵌入式系统环境中,人们过去常常使用位数来谈论和定义项目中的数据类型,例如typedef unsigned char uint8;,而不是直接使用标准数据类型所以很容易移植到另一个编译器/目标处理器

  • 你应该看看这个:为什么在 c++ 中 char 和 bool 的大小相同?

  • 您还应该查看http://www.cplusplus.com/doc/tutorial/variables在“基本数据类型”部分下的每种数据类型及其大小和范围的表格,但他指出:

Size 和 Range 列的值取决于编译程序的系统。上面显示的值是大多数 32 位系统上的值。但是对于其他系统,一般规范是 int 具有系统架构(一个“单词”)建议的自然大小,并且四种整数类型 char、short、int 和 long 必须至少与前面的一样大它,char 总是一个字节的大小。这同样适用于浮点类型 float、double 和 long double,其中每一个都必须提供至少与前一个一样多的精度。

  • 正如 sftrabbit 在他的回答中提到的标准,该标准足够抽象且不详细,因此我认为内存中 bool 的大小是特定于实现的,可能与 c++ 编译器不同,请在此处查看 Nawazs 的回答:如何布尔类型变量存储在内存中?(C++)
于 2013-01-17T22:51:55.417 回答