重新确定没有BOOL
数据类型,请采取以下措施:
std::cout << (1>2); //<<-- prints 0
假设这个错误比较为0,那么比较结果的数据类型会减少到什么?快速谷歌搜索不会产生任何结果。我最好猜测它是unsigned char
,因为它是最小的最基本的数据类型,其中0真正表示为0x00
。我不想假设任何事情,因为我不确定伏都教std::cout
对该值的影响使其成为可打印的角色。
答案 0 :(得分:10)
所有关系运算符(<
,>
,<=
,>=
)的结果类型为bool
:
运算符
<
(小于),>
(大于),<=
(小于或等于)和>=
(大于或等于)所有收益false
或true
。结果的类型为bool
。
bool
类型的对象的值为true
或false
。在整数提升下,bool
可以转换为int
其中false
1}}变为0
,true
变为1
:
bool
类型的prvalue可以转换为int
类型的prvalue,false
变为零,true
成为一个。
bool
是一个整数类型,标准所说的是用纯粹的二进制数字系统&#34;来表示。描述此表示的脚注对于如何映射到值true
和false
非常不清楚,但您可以假设它们暗示0
的值表示将是全部0
位:
使用二进制数字0和1的整数的位置表示,其中由连续位表示的值是加法的,以1开始,并且乘以2的连续积分幂,除了可能具有最高位的位位置。 (改编自美国国家信息处理系统词典。)
答案 1 :(得分:6)
没有标准的BOOL
类型,但bool
是标准的基本类型:
[C++11: 3.9.1/6]:
bool
类型的值为true
或false
。 [..]
关于你的关系比较结果:
[C++11: 5.9/1]:
关系运算符组从左到右。 [..] 操作数应具有算术,枚举或指针类型,或类型std::nullptr_t
。运算符<
(小于),>
(大于),<=
(小于或等于)和>=
(大于或等于)所有产量false
或true
。 结果的类型为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;
,而不是直接使用标准数据类型,因此很容易移植到另一个编译器/目标处理器
您还应该在“基本数据类型”部分的http://www.cplusplus.com/doc/tutorial/variables下查看每种数据类型及其大小和范围的表格,但他指出:
列大小和范围的值取决于编译程序的系统。上面显示的值是在上面找到的值 大多数32位系统。但对于其他系统,一般规范 是int具有系统体系结构建议的自然大小 (一个“字”)和四个整数类型char,short,int和long必须 每一个都至少与前一个一样大,有char 总是一个字节大小。这同样适用于浮点类型 浮动,双重和长双,每个必须提供至少为 比前一个精确得多。