二进制比较的结果减少到什么数据类型?

时间:2013-01-17 21:57:22

标签: c++ types comparison

重新确定没有BOOL数据类型,请采取以下措施:

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

假设这个错误比较为0,那么比较结果的数据类型会减少到什么?快速谷歌搜索不会产生任何结果。我最好猜测它是unsigned char,因为它是最小的最基本的数据类型,其中0真正表示为0x00。我不想假设任何事情,因为我不确定伏都教std::cout对该值的影响使其成为可打印的角色。

4 个答案:

答案 0 :(得分:10)

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

  

运算符<(小于),>(大于),<=(小于或等于)和>=(大于或等于)所有收益falsetrue。结果的类型为bool

bool类型的对象的值为truefalse。在整数提升下,bool可以转换为int其中false 1}}变为0true变为1

  

bool类型的prvalue可以转换为int类型的prvalue,false变为零,true成为一个。

bool是一个整数类型,标准所说的是用纯粹的二进制数字系统&#34;来表示。描述此表示的脚注对于如何映射到值truefalse非常不清楚,但您可以假设它们暗示0的值表示将是全部0位:

  

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

答案 1 :(得分:6)

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

  

[C++11: 3.9.1/6]: bool类型的值为truefalse [..]

关于你的关系比较结果:

  

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

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

  

[C99: 6.5/8]:每个运营商<(小于),>(大于),<=(小于或等于)和{{1}如果指定的关系为真,则(大于或等于)将产生>=,如果为假,则产生1结果的类型为0

答案 2 :(得分:2)

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

  

结果的类型为bool

答案 3 :(得分:0)

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

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

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

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

  • 你应该看一下:Why is a char and a bool the same size in c++?

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

  

列大小和范围的值取决于编译程序的系统。上面显示的值是在上面找到的值   大多数32位系统。但对于其他系统,一般规范   是int具有系统体系结构建议的自然大小   (一个“字”)和四个整数类型char,short,int和long必须   每一个都至少与前一个一样大,有char   总是一个字节大小。这同样适用于浮点类型   浮动,双重和长双,每个必须提供至少为   比前一个精确得多。

  • 正如sftrabbit所说,他的答案标准是标准是抽象的而且不详细因此我认为内存中bool的大小是一个特定的实现,可能与c ++编译器不同,检查Nawazs的答案这里:How a bool type variable is stored in memory? (C++)