C语言提供了两种非常有用的运算符就是增一和减一运算符
增一运算符是用两个加号来表示的
增一运算的作用使参与运算的值增加一个单位
增一和减一运算符都是一元运算,只需要一个操作数
它既可以作为前缀运算符,也可以作为后缀运算符
当增一和减一运算符都作为前缀运算符的时候,就是把增一和减一运算符放在它的操作数的前面。
而后缀 则把运算符放在操作数的后面
++n 增一运算符的作用,将变量的值加一之后,再重新写回到变量中去
减一运算符的作用就是,将。。。。。。。。。。。。。。。。
由于增一和减一等价的操作中还包括赋值运算
++n → n = n + 1
而赋值运算的左值不允许是表达式的,因此增一和减一它的操作数只能是变量,不能是表达式
由于它是读出这个变量的值加一之后,在重新写回到这个变量中去,因此,增一运算符也称为自增运算符
减一运算符也称为自减运算符
顾名思义自增运算符就是将变量自身的值加一。

无论作为前缀还是后缀,
它等价的操作都是一样的
增一减一为什么还要区分前缀和后缀呢?
如果将自增和自减运算,放到另外的一个表达式中的话,那么前缀和后缀就有区分理论,

作为前缀时:
先对n的值进行增1/减1,然后在去使用变量n的值
m=++n
将增一运算,放到这样的一个赋值表达式中;构成这样的一个赋值表达式语句;那么在这种情况下,这个运算符是前缀和后罪有区分的
它是先对n的值进行增1运算,然后在去使用变量n的值
m=++n;→ n=n=1; m=n
所谓之后去使用变量的值,意味着把自增运算符拿掉然后在看它是一个什么样子的操作
在这里,把自增运算符拿掉以后,就是将n的值赋值给m,
pintf("%d",++n)→n=n+1
先执行对n的自增运算,因为这里是前缀运算符,所以先对n加一运算,
然后拿掉++自增运算,在看它是一条什么样子的语句
printf("%d",n)向屏幕输出n的值
但是这里向屏幕输出n的值,是经过n加一之后n的值。
如果单从执行结果上来看,那么图上两条语句是等价的

用增一减一运算生成的代码比相应的两条语句执行速度快的多
也就是增一减一生成的目标代码的执行效率更高
作为后缀运算
后缀运算就是先去使用n的值,然后在对n的值进行增1操作
m=n++;
对变量n执行增1操作是后执行
先把自增运算符拿掉
m=n; 是一条赋值语句
n=n+1;在进行操作
后缀运算符表示对n执行的加一操作是后执行的
printf("%d",n++);
printf("%d",n);先使用n的值,在使用n的值,之后,在加一的操作
n=n+1;

前缀与后缀对变量和表达式的影响
m=++n-2;
赋值运算符右侧表达式包括两个,一个是自增一个是算术
自增运算符是一元运算符,是高于算术运算符的
因此它是相当于m=(++n)-2;
(++n)是前缀运算符,因此它相当于,先对n=n+1;
然后拿掉自增运算符m=n-2;

m=n+±2;
后缀看图
printf("%d",-n++)
这个例子中包含了两个一元运算符
而一元运算符,优先级相同,
因此,就需要根据运算符的结合性来去分析它究竟是如何来执行的
由于在C语言中,一元运算符都是右结合的,因此它相当于是把
printf("%d",-(n++))→
n=n+1;错误
printf("%d",-n)意味着++是前缀运算符
但本表达式是后缀运算符
所以不等价
printf("%d",-(n++))→
printf("%d",-n)
n=n+1; 正确
为什么将n++扩起来了,却不执行n++呢?
奥秘;我们把n++扩起来究竟代表了什么含义?这里吧n++扩起来,它只表示n++的运算对象是n,而不是-n
如果是-n的话,它表示不是右结合的了。printf("%d",(-n)++);
而是左结合的了。是从左往右计算了

正是因为它是右结合,所以要将n++扩起来;就是从右往左

如果它是一个左结合就会出现,就会-n=-n+1
相当于对-n执行加1的操作
而前面我们讲过,自增运算符只能对变量进行运算
也就是自增运算符的运算对象只能是变量,而不能是一个表达式。
-n是一个表达式,那么将表达式放在赋值运算符的左侧,这个是违反C语言的语法规则
C规定:赋值运算符的左侧一定是一个变量,不能是一个表达式。
因为我们不可能将一个表达式,赋值给另外的一个表达式,
我们只能是赋值给一个变量,赋值操作只是一个写操作,也就是把这个表达式的值,写入到变量中去、
但我们无法写入到一个表达式中去,因此它是违法的。
因此它不是左结合的printf("%d"(-n)++)
将n++扩起来,就是表示,自增运算符的运算对象是n,而不是-n,但是将n++扩起来,并不代表,将n++运算一定是先执行,它到底是先执行还是后执行,要看自增运算符是一个前缀还是后缀
如果它是一个前缀运算符,一定先执行
后缀 后执行
之所以扩起来,只是代表这个(n++)操作符的运算对象是n而不是-n

增一赋值运算 减一赋值运算相关推荐

  1. java转置矩阵相乘_java实现矩阵的加-减-乘-转置运算

    <java实现矩阵的加-减-乘-转置运算>由会员分享,可在线阅读,更多相关<java实现矩阵的加-减-乘-转置运算(3页珍藏版)>请在人人文库网上搜索. 1.import ja ...

  2. java乘方运算符号_Java 4. 运算符号

    java运算符 运算符 用来指明对于操作数的运算方式 按照操作数的数目来进行分类 单目 双目 三目 a++ a+b (a>b)?x:y; 按照运算符的功能来进行分类 算术运算符 [+ - * / ...

  3. python中幂运算_python里幂运算

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! "**"运算这个"**"比较简单,就是标 ...

  4. python中幂运算_python的幂运算

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! "**"运算这个"**"比较简单,就是标 ...

  5. python中幂运算_python中幂运算

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! "**"运算这个"**"比较简单,就是标 ...

  6. java自增运算符与自减运算符

    ++:自增运算法 -- :自减运算法 一般为了方便记忆 把放在 前面的++a 成为前++ 放到后面的a++成为后++ ++a 先+1 在运算 a++ 先运算在++ 例如: x = 2 * ++m 先运 ...

  7. 通过举例谈谈阻塞赋值与非阻塞赋值的区别

    这篇博客,通过举例说明:非阻塞赋值和阻塞赋值的区别? 一般非阻塞赋值用于时序逻辑,而阻塞赋值用于组合逻辑: 非阻塞赋值语句是并行执行的,等到一个时钟完成后才完成赋值,而阻塞赋值是顺序执行的,下一条赋值 ...

  8. python给矩阵赋值_python给矩阵赋值

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python的numpy创造矩阵from numpy import matimp ...

  9. # 异运算_小学数学运算三要点:定律、法则与顺序(解析)

    很多孩子的数学不好,尤其是女孩子.家长往往认定为数学不好就是孩子不擅长,能力差.其实未必,有的孩子数学不好的原因并不在于智商,而是没有理解到数学的方法与逻辑,比如小学的运算中,很多孩子并没有了解到运算 ...

最新文章

  1. Reporting Service 告警w WARN: Thread pool pressure. Using current thread for a work item
  2. 一步一步SharePoint 2007之八:允许所有域用户访问网站
  3. 如何用python数据挖掘_Python数据挖掘-文本挖掘
  4. 浅析人工智能的数学基础(文末送书!)
  5. eclipse发布web项目到tomcat服务器
  6. Skill Level 4 D23
  7. 算法基础部分3-动态规划
  8. CCF——游戏(2017-12)
  9. 67.Systemd 实战
  10. java 快速排序算法简单_Java 快速排序算法的简单说明及实现
  11. 已知三点坐标,求圆心坐标 (外接圆)python实现
  12. 【计算机专业日志100篇ctrlc、ctrlv】
  13. android 渐变蒙版_css3 渐变、蒙版
  14. 如何提升智慧办公效率?华为云桌面不可少,畅享集中化管理运行
  15. Ubuntu 18.04下为Firefox浏览器安装flash插件
  16. MacOS Catalina Beta使用体验
  17. js中字节B转化成KB,MB,GB
  18. 英飞凌硅麦可以接收到超声波吗?
  19. Carsim-3D路面:停车线的绘制
  20. 教您一招解决Word不能复制粘贴问题

热门文章

  1. Excel计算数值绝对值的2种操作方法
  2. 分享CAD高低版本间的转换方式
  3. 苹果手机删掉的照片怎么找回
  4. nginx(官方安装) Nginx相关文件 Nginx模块 location
  5. server 2003蓝屏代码0X0000007B解决
  6. HDU - 128 前m大的数
  7. 数睿数据深度 | 会动的黑科技来了,看五大创新技术,如何让无代码软件开发更轻松、更智能
  8. KKB : MongoDB基础知识
  9. 13th 发布在即,一文带你回顾Intel 12th Core
  10. 为什么计算机证书是发给学校6,2017关于计算机证书的有关问答