C++运算符:关系运算符与逻辑运算符
一. 关系运算符
1. 定义与作用
关系运算符用于比较两个值之间的关系,其结果为布尔值(true或false)。
2. 具体运算符及用法
(1). 小于(<):判断左边的值是否小于右边的值。
int a = 3; int b = 5; bool result = a < b; // result为true
(2). 小于等于(<=):判断左边的值是否小于等于右边的值。
int c = 3; int d = 3; bool result = c <= d; // result为true
(3). 大于(>):判断左边的值是否大于右边的值。
int e = 5; int f = 3; bool result = e > f; // result为true
(4). 大于等于(>=):判断左边的值是否大于等于右边的值。
int g = 5; int h = 5; bool result= g >= h; // result为true
(5). 等于(==):判断左右两边的值是否相等。需要注意区分它和赋值运算符(=)。
int i = 3; int j = 3; bool equal = i == j; // equal为true
(6). 不等于(!=):判断左右两边的值是否不相等。
int k = 3; int l = 5; bool notEqual = k!= l; // notEqual为true
3. 运算结果类型
关系运算符的运算结果总是布尔类型,即true或false。这一结果可以直接用于条件判断语句(如if语句)或者存储在布尔类型的变量中。
4. 运算优先级
在所有关系运算符中,它们的优先级相同。当在一个表达式中出现多个关系运算符时,按照从左到右的顺序进行运算。例如:int m = 3; int n = 5; int o = 7; bool complexResult = m < n > o;,先计算m < n得到true(转换为1),再计算1 > o得到false。
5. 关系运算符示例
#include <iostream> int main() { int num1 = 10; int num2 = 20; std::cout << "num1 < num2 is " << (num1 < num2) << std::endl; std::cout << "num1 <= num2 is " << (num1 <= num2) << std::endl; std::cout << "num1 > num2 is " << (num1 > num2) << std::endl; std::cout << "num1 >= num2 is " << (num1 >= num2) << std::endl; std::cout << "num1 == num2 is " << (num1 == num2) << std::endl; std::cout << "num1!= num2 is " << (num1!= num2) << std::endl; return 0; } // 输出结果为: num1 < num2 is 1 num1 <= num2 is 1 num1 > num2 is 0 num1 >= num2 is 0 num1 == num2 is 0 num1!= num2 is 1
二. 逻辑运算符
1. 定义与作用
逻辑运算符用于对布尔值进行逻辑运算,结果也是布尔值。
2. 具体运算符及用法
(1). 逻辑与(&&):当且仅当两个操作数都为true时,结果为true;如果有一个操作数为false,结果为false。例如:bool a = true; bool b = false; bool andResult = a && b;,andResult为false。并且&&运算符具有短路特性,即当第一个操作数为false时,不会计算第二个操作数。例如:int num1 = 0; int num2 = 5; bool shortCircuit = (num1 > 0) && (++num2 > 5);,由于num1 > 0为false,所以++num2 > 5不会被计算,num2的值仍然为5。
#include <iostream> int main() { int a = 5; int b = 10; bool result = (a > 10) && (b++ > 5); std::cout << "result is " << result << ", b is " << b << std::endl; return 0; }
输出结果为:
result is 0, b is 10
因为a > 10为false,根据逻辑与的短路特性,b++ > 5不会被执行,所以b的值没有增加。
(2). 逻辑或(||):只要两个操作数中有一个为true,结果为true;只有当两个操作数都为false时,结果为false。例如:bool c = true; bool d = false; bool orResult = c || d;,orResult为true。||运算符也具有短路特性,当第一个操作数为true时,不会计算第二个操作数。例如:int num3 = 5; int num4 = 0; bool shortCircuit2 = (num3 > 0) || (++num4 > 0);,因为num3 > 0为true,所以++num4 > 0不会被计算,num4的值仍然为0。
下面的代码演示了逻辑或运算符及其短路特性:
#include <iostream> int main() { int c = 5; int d = 10; bool res = (c > 0) || (d++ > 15); std::cout << "res is " << res << ", d is " << d << std::endl; return 0; }
输出结果为:
res is 1, d is 10
由于c > 0为true,根据逻辑或的短路特性,d++ > 15不会被执行,d的值保持不变。
(3). 逻辑非(!):对操作数取反,如果操作数为true,则结果为false;如果操作数为false,则结果为true。例如:bool e = true; bool notResult =!e;,notResult为false。
以下代码展示了逻辑非运算符的用法:
#include <iostream> int main() { bool e = true; std::cout << "!e is " << (!e) << std::endl; return 0; }
输出结果为:
!e is 0
3. 运算优先级
在逻辑运算符中,!的优先级最高,其次是&&,最后是||。例如:bool f = true; bool g = false; bool complexLogic =!f || g && f;,先计算!f得到false,然后计算g && f得到false,最后计算false || false得到false。