首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在stdbool.h中使用的是整数而不是无符号的?

为什么在stdbool.h中使用的是整数而不是无符号的?
EN

Stack Overflow用户
提问于 2019-10-30 17:30:30
回答 3查看 226关注 0票数 3

stdbool.h中,truefalse仅仅是整数。为什么不不签呢?是否有性能动机?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-10-30 18:29:50

为值falsetrue使用类型int使它们与逻辑求反运算符(!)、关系运算符(<><=>=)、相等运算符(==!=)、逻辑and运算符(&&)和逻辑OR运算符(||)产生的值类型和值集一致,所有这些运算符都产生类型为D12的值0或1。

此外,如果true被定义为1u,那么int minust = -true;会将minust初始化为实现定义的值(或引发实现定义的信号),而不是将minust初始化为值-1。编译器可能会发出警告。这是因为1u的类型为unsigned int-1u的值为UINT_MAX,而UINT_MAX不能由int表示。

我意识到-true的论点有点软弱。我想要说明的是,将falsetrue常量定义为unsigned int类型,而不是纯数字值0和1的类型(即int),会对您可以对这些常量执行的操作施加限制(在我看来是不必要的限制)。

票数 4
EN

Stack Overflow用户

发布于 2019-10-30 18:10:30

true和false都被“#defined”为0,1。因此,它们不是有符号的或无符号的,只是标记。它们将在赋值、比较时“键入”,通常不需要运行时成本。

代码语言:javascript
复制
bool b = true ;
unsigned int uv = true ;
int sv = true ;

两者执行所需的时间相同

票数 3
EN

Stack Overflow用户

发布于 2019-10-30 18:14:32

有一次,在我的一次演讲中,我的教授说,在C中将bool实现为整数是专门用于电子规则的。1电流流动,0无信号。So 1-true 0 false

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

https://stackoverflow.com/questions/58622239

复制
相关文章

相似问题

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