c - 否定 && (逻辑与)操作的结果是否安全?
问题描述
我隐约知道布尔运算符的返回类型int
在 C 中,但它是否保证是 unflavored int
,而不是,比如说,unsigned int
?
我通常担心是否允许我否定布尔运算的结果并期望它是0
or-1
和 not 2^32 - 1
。请参见以下示例:
int main(void) {
int a = -(5 == 5);
// Is "a" guaranteed to be -1 here?
}
解决方案
比较和逻辑运算符的结果是值0
or1
类型int
。int
被指定为至少保存整数范围 [−32,767, +32,767]。
-(5 == 5)
因此 总是-1
并且-(5 == 4)
是0
,
然而,这样做是令人困惑的。这些运算符的结果通常以类似布尔的方式处理,使用结果的数值可能会使代码更难理解。
使用三元运算符可以使意图更清晰:
(5 == num) ? -1 : 0
在Compiler Explorer上使用许多编译器,我没有看到生成的代码有什么不同。
推荐阅读
- java - Hybris Smartedit 永远加载“我们正在准备要在 smartedit 上编辑的页面”
- git - 如何以非交互方式选择评论?
- random - 具有特定输出的随机发生器
- excel - 运行时错误“440”:发送多个电子邮件时对象不支持此方法
- javascript - 将数据推送到 Vue.js 数据属性,但新元素不会反应性地出现在 Google 地图上
- postgresql - 在一个脚本中从不同的表中多次删除
- unix - 使用 awk 计算组的主题实例
- maven - Maven 多模块 - 只构建一个子模块
- yii2 - Yii2 通过查询组合多个计数和分组
- javascript - 在Nodejs中重新分配变量时,存储旧变量的内存是否会空闲?