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。

C++编程语言基础

C++运算符:关系运算符与逻辑运算符