c++ - 为什么逻辑和顺序改变会给出不同的输出?
问题描述
#include<iostream>
using namespace std;
int main(){
cout<<-1&&0; //output is -1
cout<<0&&-1; //output is 0
return 10;
}
我完全理解第二个输出,但无法理解第一个输出。如第二个输出和第一个操作数为 0,那么它不评估第二个运算符并给出 0,但首先它评估-1(这是真的,因为它不是零)然后它有评估 0 并给出 0 作为结果而不是 -1。
解决方案
您是误解运算符优先级的受害者。运算符<<
的优先级高于&&
,因此将在&&
is 之前对其进行完全评估。
您的陈述相当于:
(cout << -1) && 0;
(cout << 0) && -1;
如果你想&&
先评估,你需要这样做:
cout << (-1 && 0);
cout << (0 && -1);
推荐阅读
- javascript - 使用高阶组件为每个组件添加事件监听器
- excel - 使用具有自定义正文/主题的 VBA 回复特定 Outlook 电子邮件
- c++ - 为什么 pthread_cond_wait() 不与“-lpthread”链接时不阻塞?
- google-dl-platform - Jupyter Lab 的 CloudShell 的 Web 预览不起作用
- vba - 视觉基本程序太大的错误和不明确的名称检测到 worksheet_change
- salesforce - Salesforce Lightning 组件视图数据未刷新
- python-2.7 - 无法保存带有请求的 ZIP 文件
- javascript - 通过工作表脚本选择下拉项目时发送电子邮件
- c# - EF6 拦截 SQL 并记录到 DB OutOfMemoryException
- ios - 如何将自定义对象取消归档到 Swift 中的自定义类以外的其他内容