c语言运算符优先级

1、运算符介绍

        在C语言中,运算符优先级是指在表达式中执行运算的先后顺序。按照C语言的标准规范,不同的运算符被赋予了不同的优先级等级,优先级高的运算符会先进行运算。如果同一优先级的运算符出现在同一个表达式中,则按照从左到右或从右到左的结合性进行处理。

2、C语言运算符及其优先级

1) 最高优先级 - 圆括号和类型转换
  • 运算符( )(括号)、typecast(类型转换)
  • 示例:
    1int a = 10, b = 20;
    2int c = (a + 5) * b; // 先计算括号内的a+5,然后乘以b
    3char d = 'A';
    4int e = static_cast<int>(d); // 类型转换
2) 第二高优先级 - 一元运算符
  • 运算符++(前缀递增)、--(前缀递减)、+(正号,对于数值无效)、-(负号)、!(逻辑非)、~(按位取反)、*(指针解引用)、&(取地址)
  • 示例:
    1int x = 10;
    2int y = ++x; // 先递增x,再赋值给y,所以y=11
    3int z = *(&x); // 取x的地址,然后解引用,z仍等于11
3) 第三优先级 - 算术运算符
  • 运算符*(乘法)、/(除法)、%(模运算)
  • 示例:
    1int m = 10, n = 3;
    2int p = m * n / 2; // 首先计算乘法m*n得到30,再除以2,p=15
4) 第四优先级 - 加法和减法
  • 运算符+(加法)、-(减法)
  • 示例:
    1int o = 10, q = 5;
    2int r = o + q - 3; // 先计算加法o+q得到15,再减去3,r=12
5) 第五优先级 - 移位运算符
  • 运算符<<(左移)、>>(右移)
  • 示例:
    1unsigned int u = 10;
    2int shift = 2;
    3int s = u << shift; // 将u左移两位,s=40(假设int为32位)
6) 第六优先级 - 关系运算符和等于运算符
  • 运算符<(小于)、>(大于)、<=(小于等于)、>=(大于等于)、==(等于)、!=(不等于)
  • 示例:
    1if (m <= n && n != 0) { /* ... */ } // 先判断m是否小于等于n,然后判断n是否不等于0
7) 第七优先级 - 逻辑与 (&&)
  • 运算符&&(逻辑与)
  • 示例:
    1bool cond1 = true, cond2 = false;
    2if (cond1 && cond2) {} // 由于逻辑与,如果cond1为真,则检查cond2,此处不会执行if块
8) 第八优先级 - 逻辑或 (||)
  • 运算符||(逻辑或)
  • 示例:
    1if (cond1 || cond2) {} // 如果cond1为真,由于逻辑或,不会检查cond2,直接执行if块
9) 第九优先级 - 条件运算符
  • 运算符?:(三元运算符)
  • 示例:
    1int val = cond1 ? m : n; // 如果cond1为真,则val=m,否则val=n
10) 第十优先级 - 赋值运算符和其他复合赋值运算符
  • 运算符=(赋值),=+=-=*=/=%=<<=>>=&=^=|=
  • 示例:
    1int v = 0;
    2v += m; // 等价于 v = v + m
11) 最低优先级 - ,(逗号运算符)
  • 运算符,(逗号)
  • 示例:
    1int i = 0, j = 1;
    2int k = (i = 5, j = 10, i + j); // 先计算i=5,然后j=10,最后返回i+j的结果15

根据上述排序,优先级是从上至下逐渐降低的。例如,乘法和除法运算符的优先级高于加法和减法运算符。这意味着在没有括号的情况下,乘法和除法会先于加法和减法进行计算。同样地,一元运算符(如 !++)的优先级高于任何二元运算符(如 +*)。在优先级相同的运算符之间,通常按照运算符的结合性(左结合或右结合)决定运算顺序。例如,逻辑与 && 和逻辑或 || 同属一个优先级,它们都是左结合的,因此会从左向右评估。

注意:C和C++中的运算符优先级基本一致,这里的示例适用于两种语言。要详细了解所有C语言运算符及其完整的优先级列表,请查阅官方文档或相关参考资料。

  • 19
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值