自增,自减运算符使用注意及案例

1.++i , --i (在使用 i 之前,先使 i 的值加(减) 1)

2.i++ , i-- (在使用 i 之后,先使 i 的值加(减) 1)

3.int i=3;

int i=3,j;
j = ++i;// i 的值先变成 4,再赋给j,j的值为4
j = i++;// 先将 i 的值3赋给 j,j的值为 3,然后 i变成4

又如:

i=3;
printf("%d",++i); //输出 4
//若是
printf("%d\n",i++); //输出 3

4.注意

  • 自增运算符(++)和自减运算符(--)只能用于变量;
  • 错误表示:5++,(a+b)++;都是错误表达,因为最后得到的结果,没有变量可供存放;
  • 表达式k=-i++等效于k=(-i)++还是k=-(i++)因为负号运算符和自增运算符优先级相同,哪一个正确就得看结合方向。
  • 自增、自减运算符及负号运算符的结合方向是从右向左。因此,上式等效于k=-(i++);若i=5,则表达式k=-i++运算之后k的值为-5,i的值为6。此赋值表达式的值即为所赋的值-5。不要因为k=-i++等效于k=-(i++)就先做“++”运算!这里采用的是“先用后变”,即先拿出i的值做负号“-”运算,把这个值赋给变量k之后变量i才自增。

5.结合上面的基本要求和注意事项,来看“先变后用”还是“先用后变” 案例:

变量 j的值都是在 i=3,k=1的前提下求出的:

   后缀运算:
  (1)j=(5,6,(i++)+(i++)+(i++)): j=9(3+3+3)
  (2)j=(k++,6,(i++)+(i++)+(i++)): j=9(3+3+3)
  (3)j=1?(i++)+(i++)+(i++): 0: j=9(3+3+3)
  (4)j=i?(i++)+(i++)+(i++): 0: j=12(3+4+5)
  (5)j=k++?(i++)+(i++)+(i++): 0: j=12(3+4+5)
  前缀运算:
  (6)j=(5,i,(++i)+(++i)+(++i)): j=18(6+6+6)
  (7)j=(5,k++,(++i)+(++i)+(++i)): j=15(4+5+6)
  (8)j=1?(++i)+(++i)+(++i): 0: j=18(6+6+6)
  (9)j=1?(k++,(+i)+(++i)+++i)): 0: j=15(4+5+6)
  (10)j=k++?(++i)+(++i)+(++i): 0: j=15(4+5+6)

理解上述式子用到的知识:

(1)逗号表达式:

 逗号运算符是所有运算符中级别最低的。因此,下面两个表达式的作用是不同的:

  ① x=(a=3,6*3)
  ② x=a=3,6*a

  第①个是一个赋值表达式,将一个逗号表达式的值赋给x,x的值等于18。第②个是逗号表达式,它包括一个赋值表达式和一个算术表达式,x的值为3。

(2)三目运算符(结合方向,右到左)

一般形式为:
       表达式1? 表达式2: 表达式3 
       其求值规则为:如果表达式1的值为真,则以表达式2 的值作为条件表达式的值,否则以表达式2的值作为整个条件表达式的值。

6.作为初学者,写自增,自减运算符时要特别注意使用的细节;看大佬写的代码,做题时,要认真分析逻辑关系,自增自减运算符与其他运算符相结合,注意优先级,还有要从右向左计算。

7.C语言运算符优先级表

  • C语言中,运算符的运算优先级共分为15 级。
  • 1 级最高,15级最低。
  • 在表达式中,优先级较高的先于优先级较低的进行运算。
  • 而在一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。
  • 运算符的结合性:C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。
  • 例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z 则y 应先与“-”号结合,执行x-y 运算,然后再执行+z 的运算。这种自左至右的结合方向就称为“左结合性”。而自右至左的结合方向称为“右结合性”。
  • 最典型的右结合性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z 再执行x=(y=z)运算。
  • C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。
  • 说明:

    同一优先级的运算符,运算次序由结合方向所决定。

    简单记就是:! > 算术运算符 > 关系运算符 > && > || >赋值运算符

优先级 运算符 名称或含义 使用形式 结合方向 说明
1 [] 数组下标 数组名[常量表达式] 左到右  
() 圆括号 (表达式)/函数名(形参表)  
. 成员选择(对象) 对象.成员名  
-> 成员选择(指针)    
2 - 负号运算符 -表达式 右到左 单目运算符
(类型) 强制类型转换 (数据类型)表达式  
++ 自增运算符 ++变量名/变量名++ 单目运算符
-- 自减运算符 --变量名/变量名-- 单目运算符
* 取值运算符 *指针变量 单目运算符
& 取地址运算符 &变量名 单目运算符
逻辑非运算符 !表达式 单目运算符
~ 按位取反运算符 ~表达式 单目运算符
sizeof 长度运算符 sizeof(表达式)  
3 / 表达式/表达式 左到右 双目运算符
* 表达式*表达式 双目运算符
% 余数(取模) 整形表达式%整形表达式 双目运算符
4 + 表达式+表达式 左到右 双目运算符
- 表达式-表达式 双目运算符
5 << 左移 变量<<表达式 左到右 双目运算符
>> 右移 变量>>表达式 双目运算符
6 > 大于 表达式>表达式 左到右 双目运算符
>= 大于等于 表达式>=表达式 双目运算符
< 小于 表达式<表达式 双目运算符
<= 小于等于 表达式<=表达式 双目运算符
7 == 等于 表达式==表达式 左到右 双目运算符
!= 不等于 表达式!=表达式 双目运算符
8 & 按位与 表达式&表达式 左到右 双目运算符
9 ^ 按位异或 表达式^表达式 左到右 双目运算符
10 | 按位或 表达式|表达式 左到右 双目运算符
11 && 逻辑与 表达式&&表达式 左到右 双目运算符
12 || 逻辑或 表达式||表达式 左到右 双目运算符
13 ?: 条件运算符 表达式1?表达式2:表达式3 右到左 三目运算符
14 = 赋值运算符 变量=表达式 右到左  
/= 除后赋值 变量/=表达式  
*= 乘后赋值 变量*=表达式  
%= 取模后赋值 变量%=表达式  
+= 加后赋值 变量+=表达式  
-= 减后赋值 变量-=表达式  
<<= 左移后赋值 变量<<=表达式  
>>= 右移后赋值 变量>>=表达式  
&= 按位与后赋值 变量&=表达式  
^= 按位异或后赋值 变量^=表达式  
|= 按位或后赋值 变量|=表达式  
15 , 逗号运算符 表达式,表达式…… 左到右 从左到右顺序运算

C语言常见语法——运算符和表达式相关推荐

  1. 51单片机c语言除法符号,51单片机之C语言-4.4运算符及表达式

    原标题:51单片机之C语言-4.4运算符及表达式 4.4 及 前面三节实际是讲如何定义一个数据类型,所谓数据类型其实就是不同存储空间的形状,也就是不同单元格的组合方式.既然定义了数据类型,我们的目的当 ...

  2. 信工干货||C语言中的运算符和表达式

    C语言中的运算符和表达式 1算术运算符及表达式 (1)算术运算符包括: ,-,*,/,%. (2)*,/,%同级,比 ,-高. (3)"%"运算符两侧的运算分量必须为整型数据,且运 ...

  3. C语言数据类型、运算符、表达式

    数据类型.运算符.表达式 常量:在程序运行中,其值不能被改变的量就叫常量. 150;   //整型常量 12.3;    //实型常量(浮点型常量),带小数点的 'a';    //用单引号引起来的 ...

  4. Chapter Two : Python 语言基础、运算符与表达式、程序的控制结构合集

    目录 一.Python 语言基础 1. Python 语法规则 2. 关键字与标识符 3. 变量 4. 基本数据类型 5. 输入与输出 二.运算符与表达式 1. 算术运算符 2. 赋值运算符 3. 比 ...

  5. c语言表达式用法,C语言开发之运算符、表达式用法

    C语言中运算符和表达式数量之多,在高级语言中是少见的.正是丰富的运算符和表达式使C语言功能十分完善.这也是C语言的主要特点之一.C语言的运算符不仅具有不同的优先级,而且还有一个特点,就是它的结合性.在 ...

  6. 2、C语言面试笔试---运算符和表达式

    文章目录 背景 1.运算符和表达式 1.1自增自减运算符++与-- 1.2 C语言符号的优先级 1.3 类型转换 1.4 顺序点的概念 1.5 贪心法 2.面试笔试例题 背景 1.运算符和表达式 1. ...

  7. C语言再学习 -- 运算符与表达式

    分三部分来讲 一.左值与右值 参看:左值与右值 首先我们需要理解左值和右值的定义: 左值指的是如果一个表达式可以引用到某一个对象,并且这个对象是一块内存空间且可以被检查和存储,那么这个表达式就可以做为 ...

  8. 一文带你回顾go语言常见语法现象

    前言 一门语言中的语法现象都是固定的,基础语法几乎都差不多,本篇文章涉及到go入门脚本,变量,条件语句,函数等语法现象的案例, 用一篇文章梳理go基础中可能出现的所有语言现象. 先从宏观上了解一些语法 ...

  9. 六、C语言中的运算符与表达式

    一.算术运算符与算术表达式 (一)算术运算符 1.基本的算术运算符: + 加法运算符或正值运算符 - 减法运算符或负值运算符 * 乘法运算符 / 除法运算符,整数与整数相除结果为整数,且多数C编译系统 ...

最新文章

  1. 30 岁码农人生:人生至暗时,你依然能窥见光明
  2. 01_NumPy介绍,什么是NumPy,Python应用、(NumPy、SciPy、Matplotlib相关网址)--来自菜鸟和NumPy中文网
  3. Android PDU
  4. laradoc mysql acccess_安装之后,启动mysql容器失败
  5. 如何成为数据科学家_成为数据科学家的5大理由
  6. Appium环境搭建-完整版
  7. 聊聊安卓折叠屏给交互设计和开发带来的变化
  8. C语言程序设计基础练习题
  9. 正弦信号发生器设计——VHDL
  10. linux内核 3.1,快更新:Linux新内核发布 支持USB3.1!
  11. jquery ajax示例_jQuery AJAX JSP Servlet Java示例
  12. 基于SSM的旅游管理系统
  13. resnet的演化(res2net,resnext,se-resnet,sk-resnet,resnest)
  14. 校园网络登陆显示通信服务器异常,校园网络监控技术方案设计.docx
  15. 论文管理软件 Zotero 备忘
  16. pbs分解_谈WBS与PBS
  17. Typora修改空格样式(blockquote)
  18. 【MATLAB编程实例练习】-(34)直角三角形边长问题
  19. 机器学习中训练集、验证集和测试集的作用
  20. 数学建模竞赛常用软件培训2

热门文章

  1. WZOI-387图像相似度
  2. 矩阵正定 matlab,matlab 错误使用 chol 矩阵必须为正定矩阵
  3. MicroBlaze系列教程(2):AXI_INTC的使用
  4. Java break语句详解
  5. vue日程安排_vue 时间安排表
  6. 讲座报名|美团无人机团队技术分享:大规模、高精度激光SLAM
  7. xshell基础使用命令
  8. ES6代码转换为ES5的代码
  9. IO、BIO、NIO、AIO
  10. Linux下文件(文件夹)的压缩和解压