14.关系运算符

14.运算符-关系运算符


14.1 知识点

关系运算符是什么

关系运算符用于比较两个变量或常量的关系,例如:

  • 是否大于 >
  • 是否小于 <
  • 是否等于 ==
  • 是否不等于 !=
  • 是否大于等于 >=
  • 是否小于等于 <=

关系运算符一定存在左右两边的内容,例如 左边内容 关系运算符 右边内容

int a = 5;
int b = 10;

// 关系运算符不能直接这样使用
a > b;

// 运算结果会以 `bool` 类型的值返回
// 如果关系满足,返回 `true`;如果不满足,返回 `false`
bool bo = a < b;
cout << bo << endl; // 输出 1 (true)

关系运算符的运算结果可以通过赋值符号返回给左侧变量。

各种关系运算符的应用

int a = 5;
int b = 10;

// 变量与变量比较
bool result = a < b;
cout << result << endl; // 输出 1 (true)
result = a > b;
cout << result << endl; // 输出 0 (false)
result = a == b;
cout << result << endl; // 输出 0 (false)
result = a != b;
cout << result << endl; // 输出 1 (true)
result = a >= b;
cout << result << endl; // 输出 0 (false)
result = a <= b;
cout << result << endl; // 输出 1 (true)

// 变量与常量比较
result = 10 > a;
cout << result << endl; // 输出 1 (true)
result = a <= 10;
cout << result << endl; // 输出 1 (true)
result = a == 5;
cout << result << endl; // 输出 1 (true)

// 常量与常量比较
result = 5 > 3;  // 1 (true)
result = 5 == 3; // 0 (false)
result = 5 != 3; // 1 (true)

// 计算结果比较
result = a + 3 > a - 2 + 3; // 8 > 6
cout << result << endl;     // 输出 1 (true)
result = 3 + 3 < 5 - 1;     // 6 < 4
cout << result << endl;     // 输出 0 (false)

不能直接进行取值范围的比较

int a = 5;
int b = 10;

// 不准确的范围比较
bool result = 1 < a < 4;
cout << "不准确的范围比较:" << result << endl; // 输出 1 (true)

注意:不能直接这样判断一个数是否在某两个数之间。需要学习逻辑运算符后再实现范围比较。

不同类型之间的比较

不同数值类型之间可以随意进行关系运算符比较,遵循类型提升规则,即较低精度的类型会被提升为较高精度的类型。

float f = 1.2f;
double d = 5.5;
int i = 10;
short s = 5;

bool result = f > d;
cout << result << endl; // 输出 0 (false)
result = i > f;
cout << result << endl; // 输出 1 (true)

// 有符号和无符号比较
i = -1;
unsigned u = 1;
result = i < u;
cout << result << endl; // 输出 0 (false)

// 无符号数存储负数
unsigned u2 = -1;
cout << u2 << endl; // 输出 4294967295

注意:使用无符号数存储负数可能导致意外行为。

特殊类型的比较

字符串类型比较

  1. 比较基于字典序(Lexicographical Order)。
  2. 按逐字符比较 ASCII 值,当出现第一个不同字符时决定大小关系。
  3. 如果字符串完全相同,但长度不同,则较长字符串更大。
string str = "123";
int result = str != "1234";
cout << result << endl; // 输出 1 (true)

string str1 = "apple";
string str2 = "banana";
result = str1 < str2;
cout << result << endl; // 输出 1 (true)
result = str1 >= str2;
cout << result << endl; // 输出 0 (false)

string str3 = "apple";
string str4 = "app";
result = str3 > str4;
cout << result << endl; // 输出 1 (true)

字符类型比较

字符的比较基于 ASCII 值。

char c = 'A';
char c2 = 'B';
bool result = c != c2;
cout << result << endl; // 输出 1 (true)
result = c < c2;
cout << result << endl; // 输出 1 (true)
result = c >= 65;
cout << result << endl; // 输出 1 (true)

布尔类型比较

  1. true 被视为 1false 被视为 0
  2. 布尔值可以与其他布尔值或数值类型比较,按数值比较规则处理。
bool bo2 = true;  // true -> 1
bool bo3 = false; // false -> 0

result = bo2 == bo3;
cout << result << endl; // 输出 0 (false)
result = bo2 >= bo3;
cout << result << endl; // 输出 1 (true)
result = bo2 >= 595.0f;
cout << result << endl; // 输出 0 (false)
result = bo3 < -1;
cout << result << endl; // 输出 0 (false)

14.2 知识点代码

Lesson14_运算符_关系运算符.cpp

#include <iostream>
using namespace std;
int main()
{
    cout << "关系运算符\n";

    #pragma region 知识点一 关系运算符是什么

    // 用于比较两个变量或常量的关系的
    // 是否大于 >
    // 是否小于 <
    // 是否等于 == 
    // 是否不等于 !=
    // 是否大于等于 >=
    // 是否小于等于 <=

    // 关系运算符 一定存在左右两边的内容
    // 左边内容 关系运算符 右边内容
    int a = 5;
    int b = 10;
    //关系运算符 不能直接这样使用
    a > b;
    //因为纯比较不用这个结果 对于我们来说 没有任何的意义
    //关系运算符 运算结果 会以 bool类型的值 进行返回 
    // 如果关系满足 则返回true ;如果不满足关系 则返回false

    // 赋值符号的作用
    // 先算=符号右侧的 关系表达式 计算完毕后 再返回(赋值)给我们的左侧
    bool bo = a < b;
    cout << bo << endl;//1 true

    #pragma endregion

    #pragma region 知识点二 各种关系运算符的应用

    a = 5;
    b = 10;

    //变量和变量比较
    bool result = a < b;
    cout << result << endl;//1 true
    result = a > b;
    cout << result << endl;//0 false
    result = a == b;
    cout << result << endl;//0 false
    result = a != b;
    cout << result << endl;//1 true
    result = a >= b;
    cout << result << endl;//0 false
    result = a <= b;
    cout << result << endl;//1 true;

    //变量和数值(常量)比较
    result = 10 > a;
    cout << result << endl;//1 true;
    result = a <= 10;
    cout << result << endl;//1 true;
    result = a == 5;
    cout << result << endl;//1 true;

    //数值和数值比较
    result = 5 > 3;//1 true
    result = 5 == 3;//0 true
    result = 5 != 3; //1 true

    //计算结果比较
    //关系运算符的 优先级 低于 算数运算符的
    //先计算 再比较
    result = a + 3 > a - 2 + 3;	// 8 > 6
    cout << result << endl;//1 true 
    result = 3 + 3 < 5 - 1;// 6 < 4
    cout << result << endl;//0 false 

    #pragma endregion

    #pragma region 知识点三 不能直接进行取值范围的比较

    a = 5;
    b = 10;

    //判断是否在某两个值之间
    //虽然这里不会报错 但是并不会达到我们想要的结果
    //1 < a 先算 得到一个bool true = 1
    //1 < 4 得到一个bool true 1
    result = 1 < a < 4;
    cout << "不准确的范围比较" << result << endl; //1 true 

    //注意:不能这样去判断一个数是否在两个数之间!
    //学习了 逻辑运算符相关的知识点后 才能判断

    #pragma endregion

    #pragma region 知识点四 不同类型之间的比较

    //不同数值类型之间 可以随意进行关系运算符比较
    //遵循类型提升规则:即较低精度的类型会被提升为较高精度的类型进行比较
    //只要是数值 就能够进行关系运算符比较  比较大于小于等于等等
    float f = 1.2f;
    double d = 5.5;
    int i = 10;
    short s = 5;
    result = f > d;
    cout << result << endl;//0 false 
    result = i > f;
    cout << result << endl;//1 true 

    //注意:无符号和有符号进行比较时 一定要谨慎 有符号转为无符号
    i = -1;
    unsigned u = 1;
    result = i < u;
    cout << result << endl;//0 false 
    //由于将有符号转为无符号时,负数i会被变成一个很大的正数
    //因此 在i和u比较时 会出现意想不到的问题
    //尽量避免 有符号和无符号进行比较

    // 使用无符号数存储负数会导致计算时的数值异常
    unsigned u2 = -1;
    cout << u2 << endl;//4294967295
    //unsigned u2 = -1; 是将有符号的 - 1 转换为无符号整数,结果是无符号整数的最大值(对于 32 位系统,为 4294967295)。
    //这是由于 C++ 的 类型转换规则 和 二进制补码表示法 导致的。
    //在计算机中,整数通常使用 补码 表示:
    //- 1 的补码表示是所有位都为 1。在 32 位无符号整数中,这对应于:11111111 11111111 11111111 11111111
    //转换成十进制正数,就是 4294967295。

    #pragma endregion

    #pragma region 知识点五 特殊类型的比较

    // string 类型比较规则
    // 1. 比较基于字典序(Lexicographical Order)。
    // 2. 按逐字符比较 ASCII 值,当出现第一个不同字符时决定大小关系。
    // 3. 如果字符串完全相同,但长度不同,则较长字符串更大。

    string str = "123";
    int result = str != "1234";
    // 比较长度不同的字符串,"123" 和 "1234" 不相等
    cout << result << endl; // 1 true

    string str1 = "apple";
    string str2 = "banana";
    result = str1 < str2;
    // 比较首字符 'a' 和 'b' 的 ASCII 值,'a' < 'b'
    cout << result << endl; // 1 true

    result = str1 >= str2;
    // 同样比较首字符,'a' 不大于或等于 'b'
    cout << result << endl; // 0 false

    string str3 = "apple";
    string str4 = "app";
    result = str3 > str4;
    // 前缀相同,但 "apple" 更长,故 "apple" > "app"
    cout << result << endl; // 1 true


    // char 类型比较规则
    // 基于 ASCII 值进行比较,'A' 的 ASCII 值是 65,'B' 的 ASCII 值是 66。

    char c = 'A';
    char c2 = 'B';
    result = c != c2;
    // 比较 'A' 和 'B',它们的 ASCII 值不同
    cout << result << endl; // 1 true

    result = c < c2;
    // 比较 ASCII 值,65 < 66
    cout << result << endl; // 1 true

    result = c >= 65;
    // 'A' 的 ASCII 值是 65,65 >= 65
    cout << result << endl; // 1 true


    // bool 类型比较规则
    // 1. true 被视为 1,false 被视为 0。
    // 2. bool 可以与其他 bool 或数值类型比较,按数值比较规则处理。

    bool bo2 = true;        // true -> 1
    bool bo3 = false;       // false -> 0

    result = bo2 == bo3;
    // 比较 1 == 0
    cout << result << endl; // 0 false

    result = bo2 >= bo3;
    // 比较 1 >= 0
    cout << result << endl; // 1 true

    result = bo2 >= 595.0f;
    // 比较 1 >= 595.0f,1 不大于 595.0f
    cout << result << endl; // 0 false

    result = bo3 < -1;
    // 比较 0 < -1,0 不小于 -1
    cout << result << endl; // 0 false

    #pragma endregion
}

14.3 练习题

逻辑表达式结果解析

  • 我的年龄(18) > 你们的年龄(22)
    false 0

  • 兔子的速度(3m/s) < 乌龟的速度 (0.3m/s)
    false 0

  • 狗的重量(50kg) < 兔子的重量(5kg)
    false 0

  • 我身上的Money(10元) == 你身上也有Money(10元)
    true 1

求打印结果

bool b = true;
cout << (b != true);         // false 0
cout << (10 == 10);          // true 1
cout << (10 > 20);           // false 0
cout << (10 <= 20);          // true 1
cout << (10 <= 10);          // true 1

startGame 的值

bool gameOver, startGame;   // 允许不初始化
int a = 10, b = 15;
gameOver = a > (b - 5);     // 10 > 10 => false 0
startGame = gameOver == (b > (a + 5)); // false == 15 > 15 => false == false => true 1
cout << "startGame = " << startGame;  // 输出: startGame = 1

结果:
startGame = 1


14.4 练习题代码

Lesson14_练习题.cpp

#include <iostream>
using namespace std;
int main()
{
    cout << "关系运算符 练习题\n";

    #pragma region 练习题一

    //请口答下列表达式的结果
    //我的年龄(18) > 你们的年龄(22)                false 0
    //兔子的速度(3m / s) < 乌龟的速度(0.3m / s)      false 0
    //狗的重量(50kg) < 兔子的重量(5kg)                 false 0
    //我身上的Money(10元) == 你身上也有Money(10元)     true 1

    #pragma endregion

    #pragma region 练习题二

    //求打印结果是什么?
    //bool b = true;
    //cout << (b != true) << endl; // false 0

    //cout << (10 == 10) << endl; // true 1
    //cout << (10 > 20) << endl;  // false 0
    //cout << (10 <= 20) << endl; // true 1
    //cout << (10 <= 10) << endl;  //  true 1

    #pragma endregion

    #pragma region 练习题三

    //请问打印结果是什么?
    bool gameOver, startGame;//允许不初始化
    int a = 10, b = 15;
    gameOver = a > (b - 5); // 10 > 10  gameOVer = false 0
    startGame = gameOver == (b > (a + 5));// false == 15 > 15 => false == false => true 1
    cout << "startGame = " << startGame; // true 1
    
    #pragma endregion

}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏