首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >二进制比较的结果简化为什么数据类型?

二进制比较的结果简化为什么数据类型?
EN

Stack Overflow用户
提问于 2013-01-18 05:57:22
回答 4查看 129关注 0票数 0

确认没有BOOL数据类型这样的东西,请执行以下操作:

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

假设这个错误的比较是0,那么比较的结果是什么数据类型呢?在谷歌上快速搜索不会得到任何结果。我最好的猜测是它是一个unsigned char,因为它是最小的、最基本的数据类型,其中0真正表示为0x00。我不想做任何假设,因为我不确定伏都教std::cout对值做了什么才能使它成为可打印的字符。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-01-18 05:59:08

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

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

bool类型的对象的值为truefalse.Under integral promotion,可以将bool转换为int,其中false变为0true变为1

bool类型的prvalue可以转换为int类型的prvalue,其中false变为0,true变为1。

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

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

票数 10
EN

Stack Overflow用户

发布于 2013-01-18 05:58:58

没有标准的BOOL类型,但bool是一个标准的基础类型:

类型为bool

[C++11: 3.9.1/6]:值为truefalse。。。

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

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

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

[C99: 6.5/8]:如果指定的关系为真,则< (小于)、> (大于)、<= (小于或等于)和>= (大于等于)运算符中的每个运算符都将生成1,如果关系为假,则将生成0结果的类型为 int**.**

票数 6
EN

Stack Overflow用户

发布于 2013-01-18 05:59:38

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

结果类型为bool

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14388855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档