在stdbool.h中,true和false仅仅是整数。为什么不不签呢?是否有性能动机?
发布于 2019-10-30 18:29:50
为值false和true使用类型int使它们与逻辑求反运算符(!)、关系运算符(<,>,<=,>=)、相等运算符(==,!=)、逻辑and运算符(&&)和逻辑OR运算符(||)产生的值类型和值集一致,所有这些运算符都产生类型为D12的值0或1。
此外,如果true被定义为1u,那么int minust = -true;会将minust初始化为实现定义的值(或引发实现定义的信号),而不是将minust初始化为值-1。编译器可能会发出警告。这是因为1u的类型为unsigned int,-1u的值为UINT_MAX,而UINT_MAX不能由int表示。
我意识到-true的论点有点软弱。我想要说明的是,将false和true常量定义为unsigned int类型,而不是纯数字值0和1的类型(即int),会对您可以对这些常量执行的操作施加限制(在我看来是不必要的限制)。
发布于 2019-10-30 18:10:30
true和false都被“#defined”为0,1。因此,它们不是有符号的或无符号的,只是标记。它们将在赋值、比较时“键入”,通常不需要运行时成本。
bool b = true ;
unsigned int uv = true ;
int sv = true ;两者执行所需的时间相同
发布于 2019-10-30 18:14:32
有一次,在我的一次演讲中,我的教授说,在C中将bool实现为整数是专门用于电子规则的。1电流流动,0无信号。So 1-true 0 false
https://stackoverflow.com/questions/58622239
复制相似问题