【C语言】C语言运算符优先级详解

请添加图片描述


📝前言

在C语言中,运算符的优先级决定了表达式中各个运算符的计算顺序。了解这些优先级对于正确理解和编写复杂表达式至关重要。本文将深入探讨C语言中各种运算符的优先级及其影响。

🌉运算符优先级简述

C语言中的运算符根据其优先级可以分为多个级别。在表达式中,具有较高优先级的运算符会在具有较低优先级的运算符之前执行。下表列出了C语言中常见的运算符,并按照优先级从高到低的顺序排列:

优先级 运算符 描述
1 () [] -> . 函数调用、数组下标、结构体成员访问
2 ! ~ ++ – + - 逻辑非、按位取反、自增、自减、正负号
3 * / % 乘法、除法、取模
4 + - 加法、减法
5 << >> 左移、右移
6 < <= > >= 关系运算符
7 == != 等于、不等于
8 & 按位与
9 ^ 按位异或
10 | 按位或
11 && 逻辑与
12 || 逻辑或
13 ?: 条件表达式
14 = += -= *= /= %= &= ^= |= <<= >>= 赋值及复合赋值
15 , 逗号运算符

🌠逻辑与和逻辑或

#include <stdio.h>

int main() {
    int a = 5, b = 10, c = 15;
    int result;

    result = (a > b) && (b < c);   // 0
    printf("(a > b) && (b < c) = %d\n", result);

    result = (a > b) || (b < c);   // 1
    printf("(a > b) || (b < c) = %d\n", result);

    return 0;
}

在这里插入图片描述

在第一个表达式中,(a > b)为假,因此不会继续执行后面的 (b < c),直接返回结果为0。在第二个表达式中,(a > b)为假,但由于逻辑或运算符的存在,依然继续执行 (b < c),因此返回结果为1。

🌉赋值和逗号运算符

#include <stdio.h>

int main() {
    int a = 5, b = 10, c = 15;
    int result;

    result = (a = b, b = c, c);    // 15
    printf("Result = %d\n", result);

    return 0;
}

在这里插入图片描述

该表达式先执行 a = b,然后执行 b = c,最后返回 c 的值。因此结果为15。

🌠位运算

#include <stdio.h>

int main() {
    int a = 5, b = 10, c = 15;
    int result;

    result = a | b & c;    // 15
    printf("Result = %d\n", result);

    return 0;
}

在这里插入图片描述

位与运算符(&)的优先级高于位或运算符(|),所以 b & c 先被计算,然后将结果与 a 进行位或运算,得到最终结果15。

🌉条件表达式

#include <stdio.h>

int main() {
    int a = 5, b = 10;
    int result;

    result = (a > b) ? a : b;    // 10
    printf("Result = %d\n", result);

    return 0;
}

在这里插入图片描述

条件表达式 (a > b) ? a : b 先判断 (a > b) 是否为真,如果为真则返回 a,否则返回 b。因为在这个示例中 (a > b) 为假,所以返回结果为10。

🌉位运算与算术运算结合

#include <stdio.h>

int main() {
    int a = 5, b = 10, c = 3;
    int result;

    result = a + b << c;    // 320
    printf("Result = %d\n", result);

    return 0;
}

在这里插入图片描述

在这个示例中,+ 的优先级高于 <<,所以先进行加法运算,然后再进行位左移运算。因此结果为 (a + b) << c = (5 + 10) << 3 = 15 << 3 = 120。

🌉混合使用条件表达式和赋值运算符

#include <stdio.h>

int main() {
    int a = 5, b = 10;
    int result;

    result = (a > b) ? (a *= 2) : (b /= 2);    // b = 5 / 2 = 2
    printf("Result = %d\n", result);

    return 0;
}

在这里插入图片描述

条件表达式中,如果 (a > b) 为假,则执行 (b /= 2),即 b 的值除以2,因此 b 最终为5。同时,条件表达式的值就是所执行的分支的值,因此 result 的值也是5。

🌉 逗号运算符的使用

#include <stdio.h>

int main() {
    int a = 5, b = 10, c = 15;
    int result;

    result = (a = b + 2, b = c - 3, c * 2);    // 30
    printf("Result = %d\n", result);

    return 0;
}

在这里插入图片描述
逗号运算符的优先级是最低的,因此整个表达式首先会执行 (a = b + 2),然后执行 (b = c - 3),最后返回 c * 2 的值。因此结果为 (15 * 2) = 30。

🌉 复杂条件表达式

#include <stdio.h>

int main() {
    int a = 5, b = 10, c = 15;
    int result;

    result = (a > b) ? ((b > c) ? (a + b) : (b + c)) : (a + c);    // 20
    printf("Result = %d\n", result);

    return 0;
}

在这个示例中,先判断 (a > b),如果为真则进一步判断 (b > c),如果也为真则返回 (a + b),否则返回 (b + c);如果 (a > b) 为假,则直接返回 (a + c)。因为在这个示例中 (a > b) 为假,所以返回结果为20。

🌠运算符优先级的重要性

深入理解运算符优先级对于编写高效、清晰的代码至关重要。在编写复杂表达式时,合理使用括号可以消除歧义,并确保表达式按照预期的顺序计算。错误的运算符优先级使用可能导致意外的结果,因此程序员应该牢记优先级规则并善加利用。


🚩总结

请添加图片描述

相关推荐

  1. C 语言运算符详解

    2024-03-22 22:00:06       59 阅读
  2. C语言自学笔记3-----C语言运算符优先级

    2024-03-22 22:00:06       41 阅读
  3. 【保姆级讲解C语言中的运算符优先级

    2024-03-22 22:00:06       36 阅读
  4. C语言中的运算符及算术运算符详解

    2024-03-22 22:00:06       51 阅读
  5. C语言运算符

    2024-03-22 22:00:06       56 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-22 22:00:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-22 22:00:06       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-22 22:00:06       82 阅读
  4. Python语言-面向对象

    2024-03-22 22:00:06       91 阅读

热门阅读

  1. 前端逻辑错误或UI崩溃解决问题

    2024-03-22 22:00:06       38 阅读
  2. SQL Server创建存储过程

    2024-03-22 22:00:06       43 阅读
  3. 力扣-283. 移动零

    2024-03-22 22:00:06       47 阅读
  4. 基于STM32的寻迹小车设计详细论文

    2024-03-22 22:00:06       34 阅读
  5. Thingworx高可用集群部署(七)-Zookeeper集群部署

    2024-03-22 22:00:06       41 阅读
  6. Redis切换数据库的详细介绍

    2024-03-22 22:00:06       45 阅读
  7. 洛克王国卡小游戏2

    2024-03-22 22:00:06       39 阅读
  8. Yarn 管理的前端项目转换为使用 npm

    2024-03-22 22:00:06       41 阅读
  9. Redis 产生阻塞的原因,如何找到阻塞的原因

    2024-03-22 22:00:06       39 阅读
  10. 快速排序--C语言

    2024-03-22 22:00:06       44 阅读
  11. 【大数据技术】Hive基本原理以及使用教程

    2024-03-22 22:00:06       44 阅读
  12. docker 修改默认存储位置

    2024-03-22 22:00:06       38 阅读
  13. CSS color-mix() 函数

    2024-03-22 22:00:06       44 阅读
  14. less与sass哪个更好用

    2024-03-22 22:00:06       47 阅读
  15. NoSQL

    NoSQL

    2024-03-22 22:00:06      28 阅读
  16. python基础知识(四)

    2024-03-22 22:00:06       42 阅读