CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

a/=b++ ;

楼主shihyuyao(深水聲道)2005-11-25 08:21:39 在 C/C++ / C语言 提问

a/=b++   ;  
   
  为什么是先处理   a/=b   ;   再处理   b++;  
   
  /=   优先权不是低于   ++   吗??  
   
  谢谢  
   
   
  问题点数:5、回复次数:33Top

1 楼dazhuzhuerduo(大猪猪耳朵)回复于 2005-11-25 08:35:26 得分 0

b++的这种写法含义是先用b的原来值参与运算,然后再加1Top

2 楼xiaocai0001(高楼目尽欲黄昏/梧桐叶上萧萧雨)回复于 2005-11-25 08:36:47 得分 5

但是++后缀  
  虽然先处理了b++,   b值自增一了,   但在表达式中(b++)表达式的值仍是未自加之前的值  
  因此效果就相当于   a   /=   b;   ++b;  
  也可以这么理解  
  a   /=   b++;  
  相当于  
  c   =   b;  
  ++b;  
  a   /=   c;  
   
  这段代码与  
  a   /=   b;  
  ++b;  
  在执行结果上是没有区别的.  
   
  如果写成   a   /=   a++;   这种表达式的结果就令人费解了,Top

3 楼csucdl(csucdl)回复于 2005-11-25 08:37:32 得分 0

a   /=   b++  
  右边b++   是一个表达式,   占用了临时空间假设为x,   则   x   ==   b;  
  所以   a   ==   a   /   x;  
  然后   b   =   b   +   1;Top

4 楼goodluckyxl(被人遗忘的狗)回复于 2005-11-25 08:37:48 得分 0

是   ++   优先级高    
  难道a/=b  
  然后再   a++?    
     
   
  Top

5 楼laoren_80(老车站)回复于 2005-11-25 08:46:45 得分 0

a/=b++   ;  
   
  为什么是先处理   a/=b   ;   再处理   b++;  
   
  /=   优先权不是低于   ++   吗??  
   
  ----------------------------------------  
  b++的意思是先把b进行表达式的运算在++  
  如果换成++b就不一样了Top

6 楼xinlingwuyu(**用代码诠释生命**)回复于 2005-11-25 08:53:01 得分 0

支持!  
  Top

7 楼shihyuyao(深水聲道)回复于 2005-11-25 08:53:27 得分 0

謝謝各位大大解惑  
   
  我大概了解Top

8 楼wangli3274(王丽)回复于 2005-11-25 09:01:54 得分 0

个人认为xiaocai0001(萧筱雨)已经说得很清楚了。  
  就如:  
  void   main()  
  {  
      int   a=1;  
      printf("%d",a++);  
  }  
  结果仍是:1  
  并不是a++未进行处理,而是,处理之后下一次用的时候才改变,当前a值仍未改变,这就是a++与++a的区别。  
   
  Top

9 楼zkingsun()回复于 2005-11-25 12:09:58 得分 0

a/=b++   ;  
  b是在表达式完了后执行++运算的  
  上面的说得很清楚了Top

10 楼chen_fu(精灵东东)回复于 2005-11-25 15:07:01 得分 0

a   /=   b++;  
  a   /=   ++b;  
   
  b++先用后加,即:a/=b;b++;  
  ++b先加后用,即:++b;   a/=b;Top

11 楼busishusheng(不死书生)回复于 2005-11-25 15:46:47 得分 0

先算a=a/b再算b=b++Top

12 楼wucloudy(跳跳云)回复于 2005-11-25 15:50:18 得分 0

b++的这种写法含义是先用b的原来值参与运算,然后再加1  
  所以,如果这个时候b=5那么,在做a/=b的时候b是5,而作完这条完整的语句之后b=6了,和他的优先级没有关系Top

13 楼shihyuyao(深水聲道)回复于 2005-11-25 18:41:39 得分 0

a/=b++;  
  a/=++b;  
   
  有点乱掉  
   
  还是跟后缀++   &   ++前缀有关系  
   
  这跟   /=   ,++     优先顺序有关吗??  
   
   
  Top

14 楼lovefreex(笨わ孩)回复于 2005-11-25 18:47:30 得分 0

不知道就用括号,呵呵~`Top

15 楼aucs518(专注DOTNET~)回复于 2005-11-25 21:58:59 得分 0

void   main()  
  {  
      int   a=4,b=1;  
      printf("%d",a/b++);  
      printf("%d",a/++b);  
  }  
   
  比较一下就明白了Top

16 楼ErikChen1985()回复于 2005-11-25 22:27:12 得分 0

这些代码一点意义都没有,干吗要写一些这样令人费解的代码啊!Top

17 楼cocopww(春天我把老婆种下去,秋天我就有好多好多老婆啦)回复于 2005-11-26 01:23:25 得分 0

估计没人会把代码写成这样。。  
   
  不过   问题还是值得想想  
    a/=++a;     //a++换成了++a  
  ——>结果还是先   ++a   在   a/=++a吗?Top

18 楼m0792(索富特微儿(SOFTWARE))回复于 2005-11-26 01:34:18 得分 0

要理解++i   与   i++  
   
  ++i   是先算加在运算  
   
  i++   是先运算在加啊  
   
  就是说i++是先用i运算在使i+1;而++i是先做自加,就是先使i的值加一在进行别的运算~!  
   
  Top

19 楼cunsh(村少)回复于 2005-11-26 01:45:32 得分 0

xiaocai   说清楚了.  
  后缀++   返回的是一个临时的const   的值.Top

20 楼billjoy(虫虫头低低)回复于 2005-11-26 13:33:47 得分 0

应该和编译器的也有点关系!Top

21 楼ilovedudu(void *)回复于 2005-11-26 15:29:14 得分 0

7:                 a   /=   a++;  
  0040102F       mov                   eax,dword   ptr   [ebp-4]  
  00401032       cdq  
  00401033       idiv                 eax,dword   ptr   [ebp-4]  
  00401036       mov                   dword   ptr   [ebp-4],eax  
  00401039       mov                   eax,dword   ptr   [ebp-4]  
  0040103C       add                   eax,1  
  0040103F       mov                   dword   ptr   [ebp-4],eax  
   
  想问一下 cdq 是什么意思?Top

22 楼jiazichenzhan(毛毛)回复于 2005-11-26 15:45:12 得分 0

学习中……Top

23 楼zw24127(政委)回复于 2005-11-26 16:18:38 得分 0

a/=b       假若b是一表达式的话,先算表达式的值,再算a/b的值.    
   
  @=   是先算=右边的值,再算@运算的!!!!Top

24 楼shiao2005(Shiao)回复于 2005-11-26 17:42:58 得分 0

a/=b++   ;  
  等价于  
  a   =   a   /   (b++);  
   
  Top

25 楼xsm(程序)回复于 2005-11-26 18:47:59 得分 0

a/=b++;  
  1:b++;  
  2:   a=a/b;  
   
  Top

26 楼overcomeunicom_xu(chaoshan)回复于 2005-11-26 21:40:51 得分 0

没必要说得这么复杂  
  单运算操作符及=操作符其结合是从右向左  
  其余操作符从左到右  
  a/=b++;  
  ++为单运算符,那么a/=b++;<==>a/=(b++);Top

27 楼nonlyli(Perfect.Li)回复于 2005-11-26 22:34:37 得分 0

前几天正好跟朋友聊这个问题,总是似乎明白,又似乎有些问题。  
  今天彻底分析小结了一下,反汇编后的代码说明问题。  
   
  关键问题在于,a   /=   b++,虽然是++先运算,但++是先用值,后++  
  自增1的操作,在整个表达式完成之后才会执行。  
   
  如果还不清楚,看今天新的blog,附了代码:  
  http://nonlyli.host.9466.cn/blog/post/C_self_plus.htmlTop

28 楼leona404(李思)回复于 2005-11-26 23:55:24 得分 0

搞清楚b++跟++b的区别就会明白了Top

29 楼herryhuang(Herry)回复于 2005-11-27 00:38:40 得分 0

if   (b   ==   0)  
  {  
        shit!!!  
  }Top

30 楼bombwang(王)回复于 2005-11-27 08:53:00 得分 0

学习Top

31 楼creative55(hansonlu)回复于 2005-11-27 10:47:01 得分 0

这种问题需要拿来讨论吗?shitTop

32 楼homtipo()回复于 2005-11-27 16:05:56 得分 0

这是和编译器有关系的。   没有什么意思呀讨论这种题目。   现在等级考试都很少考了。Top

33 楼gitolf()回复于 2005-11-27 16:49:20 得分 0

执行b++后,b的值加1了,然而b++这个表达式的值还是原来的值,表达式和变量的值是不同的!Top

相关问题

  • b
  • b
  • b
  • b
  • a+++++b
  • B b;A &r=b;r.f();
  • C/S OR B/S
  • b/s,c/s
  • C\S ====> B\S
  • C/S------------->B/S

关键词

  • 代码
  • 执行
  • 表达式
  • 运算
  • 值
  • 操作符
  • 后缀
  • 处理
  • 意思
  • ebp

得分解答快速导航

  • 帖主:shihyuyao
  • xiaocai0001

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo