关于如何在 cout 中处理布尔值的考试问题
Exam ques. on how booleans are handled in cout
我正在为即将到来的考试做准备,遇到了这个对我来说没有意义的过去考试问题。
考虑以下主要功能:
int main()
{
int x = 0;
cout << "x = " << x << ", (0 < x < 10) = " << (0 < x < 10) << endl;
int x = 5;
cout << "x = " << x << ", (0 < x < 10) = " << (0 < x < 10) << endl;
int x = 10;
cout << "x = " << x << ", (0 < x < 10) = " << (0 < x < 10) << endl;
return 0;
}
执行时,程序会打印以下内容:
x = 0, (0 < x < 10) = 1
x = 5, (0 < x < 10) = 1
x = 10, (0 < x < 10) = 1
准确解释发生了什么。
这就是问题所在。据我所知,输出的最后一行应该是"x = 10,(0
你期望0 < x < 10
是什么意思?
它不会检查x
是否在 0
和 10
之间,如果这是你的想法。
<
是一个二元运算符,它遵循运算符计算规则(优先级和关联性)。
所以0 < x < 10
实际上意味着(0 < x) < 10
.您需要进行两次检查才能获得所需的结果(留给您)。
0 < x < 10
不会做你认为它做的事情。它( 0 < x ) < 10
这不是你想要的。0 < x
的结果(将true
或false
)然后与< 10
进行核对,结果也将给出true
(数值上等于1)或false
(数值上等于0)。
你需要
( 0 < x ) && ( x < 10 )
以检查它们之间是否有x
。
因此,您使用 x=0
的第一个cout
与给出 false 然后给出 0 < 10
的 ( 0 < 0 )
相同(false 在数值上为 0),因此结果为 1。
类似地,您在x=5
的第二个cout
首先给出结果为假,然后使用0 < 10
,它给出真。
最后,您在x=10
第一次cout
结果为真,再次为真,因此结果为 1。
相关文章:
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 变量定义到C++布尔值转换
- 如何确保在使用基于布尔值的两个方法之一调用方法时避免分支预测错误
- 重载更少,则运算符返回相反的布尔值
- 将此布尔值传递给此函数的最有效方法是什么?
- 如何设置 c++ 类的布尔值?
- 使用 MAKEWORD / MAKEWPARAM 使用布尔值而不是布尔值
- 将 10 个线程与原子布尔值同步
- 创建类似于布尔值的变量类型
- 布尔值向量的基于范围 for 循环
- 零点和布尔值之间的比较
- 简化对两个布尔值的 4 个 if/else 检查
- 无法创建带有布尔值和矢量的地图
- 对于完成布尔值设置为 true 后未停止的循环
- fstream / ifstream / ofstream 对象如何转换为布尔值
- C++:将值赋值给原始数据类型(例如布尔值)是原子操作吗?
- 为什么布尔值不能比作最后一点?
- 如何使用返回布尔值的函数?
- 将uintptr_t转换为布尔值会使 SSO 基准速度减慢数倍
- 关于如何在 cout 中处理布尔值的考试问题