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

Cha*_*son 0 c++ comparison types

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

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

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

Jos*_*eld 10

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

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

类型的对象bool具有的值truefalse.Under积分推广,一个bool可被转换为int在那里false变成0true变成1:

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

bool是一个整数类型,标准所说的是用"纯二进制计算系统"表示的.描述此表示的脚注是它是如何映射到的值相当不明确truefalse,但你可以认为他们是暗示该值表示的0是所有0位:

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

  • 不,这是一个真实的类型.`BOOL`只是一个糟糕的WinAPI typedef,与任何事情无关. (5认同)
  • @hydroparadise,也许在C中用`<stdbool.h>`. (2认同)

Lig*_*ica 6

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

[C++11: 3.9.1/6]:类型的值booltruefalse.[..]

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

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

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

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