C语言运算符优先级讲解及使用示例

本文详细解释了C语言中运算符的优先级和结合性,通过示例展示了如何利用括号改变运算顺序,以及不同运算符如算术、关系、逻辑、位运算、赋值和条件运算的优先级。理解这些规则对于编写正确且可读的C代码至关重要。
摘要由CSDN通过智能技术生成

C语言中的运算符优先级决定了在表达式中各个运算符的执行顺序。优先级高的运算符会先被计算,而优先级低的运算符则后计算。当多个运算符的优先级相同时,它们的计算顺序则取决于结合性,即是从左到右还是从右到左。

C语言运算符的优先级从高到低大致如下:

括号运算符(())、下标运算符([])、指向结构体成员运算符(->)、结构体成员运算符(.)。

单目运算符:逻辑非运算符(!)、按位取反运算符(~)、自增运算符(++)、自减运算符(–)、取地址运算符(&)、类型转换运算符((类型))、指针运算符(*)、长度运算符(sizeof)。

乘法运算符(*)、除法运算符(/)、取余运算符(%)。

加法运算符(+)、减法运算符(-)。

左移运算符(<<)、右移运算符(>>)。

关系运算符(<、>、<=、>=)。

等于运算符(==)、不等于运算符(!=)。

按位与运算符(&)。

按位异或运算符(^)。

按位或运算符(|)。

逻辑与运算符(&&)。

逻辑或运算符(||)。

条件运算符(?:)。

赋值运算符(=、+=、-=、*=、/=、%=、&=、^=、|=)。

逗号运算符(,)。

注意,可以使用括号来改变运算的优先级,强制某些部分的运算先于其他部分。

示例一:

以下是一个C语言运算符优先级的示例:

#include <stdio.h>  
  
int main() {  
    int a = 5;  
    int b = 3;  
    int c = 2;  
    int d;  
  
    // 使用括号改变运算优先级  
    d = (a + b) * c; // 先计算括号内的加法,再与c相乘  
    printf("d = %d\n", d); // 输出:d = 16  
  
    // 不使用括号,根据运算符优先级计算  
    d = a + b * c; // 先计算乘法,再与a相加  
    printf("d = %d\n", d); // 输出:d = 11  
  
    return 0;  
}

在这个示例中,我们首先定义了三个整数变量a、b和c,并初始化为5、3和2。然后,我们定义了一个整数变量d,用于存储运算结果。

在第一个运算中,我们使用了括号来改变运算的优先级。因此,括号内的加法(a + b)会先被计算,得到结果8,然后再与c相乘,得到最终结果16。

在第二个运算中,我们没有使用括号,因此会根据运算符的优先级进行计算。根据优先级规则,乘法运算符(*)的优先级高于加法运算符(+),所以b * c会先被计算,得到结果6,然后再与a相加,得到最终结果11。

这个例子展示了如何使用括号来改变C语言中运算符的优先级,以及在没有括号的情况下,如何根据运算符的优先级规则进行计算。

示例二:

#include <stdio.h>  
  
int main() {  
    int a = 5;  
    int b = 10;  
    int c = 3;  
    int d;  
    int e;  
  
    // 示例1:算术运算符优先级  
    d = a + b * c; // 先执行乘法,再执行加法  
    printf("d = %d\n", d); // 输出:d = 35  
  
    // 示例2:关系运算符和逻辑运算符优先级  
    e = (a > b) && (c < b); // 先执行关系运算,再执行逻辑与  
    printf("e = %d\n", e); // 输出:e = 1,因为 5 > 10 是假的,但 3 < 10 是真的,假与真结果为假(0),在C语言中非0为真,0为假  
  
    // 示例3:自增和自减运算符优先级  
    a++; // a变为6  
    b--; // b变为9  
    d = a + b; // 此时a为6,b为9  
    printf("a = %d, b = %d, d = %d\n", a, b, d); // 输出:a = 6, b = 9, d = 15  
  
    // 示例4:位运算符优先级  
    int f = 60; // 二进制表示为 0011 1100  
    int g = 13; // 二进制表示为 0000 1101  
    int h = f & g; // 按位与运算,结果为 0000 1100  
    printf("h = %d\n", h); // 输出:h = 12  
  
    // 示例5:赋值运算符优先级  
    int i = 2;  
    i += 5; // 等价于 i = i + 5,i变为7  
    printf("i = %d\n", i); // 输出:i = 7  
  
    // 示例6:条件运算符优先级  
    int j = (a > b) ? a : b; // 如果a大于b,则j为a的值,否则为b的值  
    printf("j = %d\n", j); // 输出:j = 6  
  
    return 0;  
}

在这个示例中,我们展示了不同类型的运算符以及它们的优先级。

在示例1中,我们展示了算术运算符的优先级。乘法运算符(*)的优先级高于加法运算符(+),所以先计算 b * c 得到结果 30,再与 a 相加得到 35。

在示例2中,我们展示了关系运算符(>)和逻辑运算符(&&)的优先级。关系运算符的优先级高于逻辑运算符,所以先计算 a > b 和 c < b,得到两个布尔值,然后执行逻辑与运算。

在示例3中,我们展示了自增和自减运算符。它们属于单目运算符,会先对变量进行操作,然后再进行其他运算。

在示例4中,我们展示了位运算符的优先级。按位与运算符(&)用于比较两个整数的二进制表示,并返回一个新的整数,其每一位都是两个输入整数对应位进行与运算的结果。

在示例5中,我们展示了赋值运算符的优先级。+= 是一个复合赋值运算符,它先执行加法运算,然后将结果赋值给变量。

在示例6中,我们展示了条件运算符(?:)的优先级。条件运算符用于根据条件表达式的结果来赋值。

这个示例涵盖了多种类型的运算符,并展示了它们在实际代码中的使用方式以及优先级关系。在实际编程中,了解运算符的优先级和结合性是非常重要的,以确保代码的正确性和可读性。

  • 21
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

点灯师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值