文章目录

  • C语言中的运算符
  • C语言中运算符的优先级
  • 帮助记忆优先级的方法
    • 先粗分
    • 再细分
    • 最后吃透
  • 因不明确优先级而造成的常见问题

C语言中的运算符

C语言中的运算符说多也多,说不多也不多,包括以下运算符:

运算符类别 运算符
下标引用、函数调用和结构成员 [ ]、( )、->、.
单目运算符 !、~、++、–、+、-、sizeof、(type)、*、&
算术运算符 +、-、*、/、%
移位运算符 <<、>>
关系运算符 >、>=、<、<=、==、!=
位运算符 &、^、|
逻辑运算符 &&、||
赋值运算符 =、+=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=
条件运算符(三目运算符) exper1 ? exper2 : exper3
逗号运算符 ,

C语言中运算符的优先级

C语言运算符优先级表(由上至下,优先级依次递减)

运算符 结合性
( )、[ ]、->、. L-R
!、~、++、–、+、-、(type)、*、&、sizeof R-L
*、/、% L-R
+、- L-R
<<、>> L-R
<、<=、>、>= L-R
==、!= L-R
& L-R
^ L-R
| L-R
&& L-R
|| L-R
=、+=、-=、*=、/=、%=、&=、^=、|=、<<=、>>= R-L
exper1 ? exper2 : exper3 R-L
, L-R

帮助记忆优先级的方法

先粗分

优先级最高的其实并不是真正意义上的运算符,包括数组下标、函数调用操作符和各结构体成员选择操作符。

单目运算符的优先级仅次于前述运算符,在所有真正意义是的运算符中,单目运算符的优先级最高。

优先级比单目运算符要低的,接下来就是双目运算符。

双目运算符之后就是三目运算符(条件运算符)。

优先级最低的就是逗号运算符了。

再细分

需要进一步细分的就是双目运算符了,我们需要记住:在双目运算符中,算术运算符的优先级最高,移位运算符次之,关系运算符再次之,接着就是位运算符,最后是逻辑运算符。

你们可能以为我忘了双目运算符中还有一个赋值运算符,其实赋值运算符算是一个特例:赋值运算符的优先级低于三目运算符(条件运算符)

需要注意的最重要的两点是:

  1. 任何一个逻辑运算符或位运算符的优先级低于任何一个关系运算符。
  2. 移位运算符的优先级比算术运算符要低,但是比关系运算符要高。

最后吃透

在算术运算符中:*、/、%的优先级高于+、-运算符,这和我们平常的数学算式中要先算乘、除的规则可以对应起来。

在关系运算符中:==和!=的优先级要低于其他关系运算符。

在位运算符和逻辑运算符中:每个“与”运算符要比相应的“或”运算符的优先级高,而且按位异或(^)的优先级介于按位与(&)和按位或(|)之间。

因不明确优先级而造成的常见问题

假设hi和low是两个整数,它们的值介于0和15之间,如果r是一个8位(二进制位)整数,且r的低4位与low各位上的数一致,而r的高4位与hi各位上的数一致,那么r如何表示呢?

我们很容易想到这样一句代码:

r = hi<<4 + low;

这句代码的想法是正确的,但是不幸的是,“+”运算符的优先级高于“<<”运算符的优先级,所以这句代码等效于:

r = hi<<(4 + low);

所以正确写法应该是这样的:

r = (hi<<4) + low;

C语言中运算符的优先级问题(如何巧妙记忆运算符的优先级顺序)相关推荐

  1. C语言中几个容易踩的“坑”!

    今天给大家分享几个C语言中的坑. 一.带参数的宏展开顺序 #include #define f(a,b) a##b #define g(a) #a #define h(a) g(a)int main( ...

  2. C 语言中负数移位运算讲解

    C 语言中负数移位运算讲解 "<<".">>"为移位运算符. "<<"为左移位运算符,即数据字节中的每个 ...

  3. 一步带你了解C语言中++、--的使用方法!

    一步让你了解C语言中++.--的使用方法! 一.前言 二.++.- -运算符 (1)前缀形式和后缀形式单独使用,并未出现在表达式中 (2)前缀形式后缀形式放入表达式中 三.代码实现 一.前言 C语言中 ...

  4. c语言整数除法转换成浮点型,C语言中的类型转换

    在C语言中不同类型的数据也可以使用二元运算符进行运算,不过如果不明白其中的规律的话,编出来的程序就会有些危险了. 强制类型转换 自动转换类型 举个例子: /*测试数据的类型转换*/ #include ...

  5. 在c语言程序中 感叹号是什么,c语言中(感叹号!)是什么意思?

    !表示逻辑非,是逻辑运算符,运算对象是真或假. 若表示a不等于0,就写成a!=0:假设a等于1,那a!=0:就是真的,true. C语言中的符号分为10类:算术运算符.关系运算符.逻辑运算符.位操作运 ...

  6. c语言中描述x和y都大于或等于z的表达式,C语言期末考试题含答案.doc

    C语言期末考试题含答案 <C语言程序设计>期末试卷 一.单项选择题(10x2'=20') 1.以下叙述正确的是( ) A)C语言的源程序不必通过编译就可以直接运行. B)C语言中的每条可执 ...

  7. c语言表达式amp;amp;,C语言中的运算符及其优先级

    C语言中的运算符及其优先级 优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右 () 圆括号 (表达式)/函数名(形参表) . 成员选择(对象) 对 ...

  8. c语言中赋值的时候顿号的作用,C语言运算符及其优先级汇总表口诀

    在看一些字符串问题的时候,经常出现这样的语句, *tmp++ = *p;比如tmp和p是指向数组元素的指针,那么这个语句的执行顺序是怎样的呢?正确的理解是*tmp,将*p赋给*tmp后tmp++.但是 ...

  9. c语言中赋值的时候顿号的作用,简单总结C语言中的运算符优先级

    简单总结C语言中的运算符优先级 C语言中有很多运算符,除了四则运算,还有位运算.比较运算.逻辑运算.赋值运算等等,令人眼花缭乱的同时,优先级也让人头疼.通常建议在写代码的时候不用省略括号,但是并不是所 ...

最新文章

  1. leetcode算法题--叶值的最小代价生成树
  2. 如何用python“优雅的”调用有道翻译
  3. C++fast power快速指数的实现(附完整源码)
  4. OpenGL-坐标系概念
  5. dataframe常用操作_Pandas | Dataframe的merge操作,像数据库一样尽情join
  6. php边框的颜色 怎么设置,网页中table表格如何修改边框颜色
  7. 用matlab设计滤波器实验报告,数字信号出来实验报告--matlab滤波器设计
  8. CSS快速学习:几种导航条案例
  9. 【Head First 设计模式】-装饰者模式读后总结
  10. 魔兽世界账号与服务器的关系,账号整合不用烦 《魔兽世界》角色转移问题一览...
  11. 网页布局:左边为导航,右边正文,左边和右边的高度总是相等,或者导航最低高度为屏幕高度...
  12. 从零开始制作游戏外挂
  13. python三重积分_(整理)三重积分及其计算和多重积分72254.
  14. 推动工业品B2B企业转型:整合制造工业电商平台解决方案
  15. outlook如何同步服务器sent文件夹,.ost 文件的同步问题 - Exchange | Microsoft Docs
  16. UI设计 AndroidIOS开发推荐用色
  17. JavaScript自定义tirm方法
  18. 安装Deepin后,无法进入windows解决
  19. 如何判断服务器是否被黑
  20. 计算机内用户文件夹中的文件,在位于计算机上所有用户的AppData文件夹中的文件中修改一行...

热门文章

  1. 利用Matlab编写龙贝格算法(romberg)求函数积分
  2. 广州橙色优学:Java为什么这么火?Java好学吗?
  3. 单模光纤与多模光纤的简介与区别
  4. echarts 盒须图配置
  5. 设计模式——代理模式(附代码示例)
  6. 开启和关闭远程Windows系统3389端口
  7. imregionalmin
  8. java-php-python-ssm蔬菜水果销售系统计算机毕业设计
  9. 1490_TC275_UART_shell例程测试
  10. 机械制图及计算机绘图试题库,101机械制图及计算机绘图1试题库..doc