| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1526 人关注过本帖
标题:初学者的白痴问题
只看楼主 加入收藏
五当家
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:2
帖 子:1112
专家分:3674
注 册:2010-10-20
收藏
得分:6 
没啥区别,就是a+=b比a=a+b更简洁,初学者可能不适应会选择用a=a+b

经验积累中............
2010-10-20 20:00
jiangkunhgnc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:76
专家分:185
注 册:2010-8-21
收藏
得分:6 
符合赋值运算符有些特殊的用途,在计算结果上利用一些特别的结构可以得到一些特定的结果!
不过简单的符合赋值运算没有什么大的区别,
例如a += b等介于a = a+b,结果一样,效率也不会有太大区别,
不同的是,赋值运算符的优先级仅高于逗号运算符,
所以符合运算符可以这么用:
int a=1;
int b=1;
a += b + (a++);
那么这时就不等价于a = a + b + (a++)了,而等介于
a = b + (a++) + a
2010-10-20 21:39
shafeilong
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:236
专家分:1434
注 册:2009-3-21
收藏
得分:6 
有区别的   i=i+1   (1)
           i++;    (2)
           i+=1    (3)
虽然都是让i+1   但是运行速度 2>3>1
2010-10-21 10:23
kinghao
Rank: 2
等 级:论坛游民
帖 子:15
专家分:16
注 册:2010-5-23
收藏
得分:6 
一个是可读性不一样,还有一个就是效率不同~
2010-10-21 11:54
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:0 
前面的写法 在空间上更省 从而效率更高 只需要3个单元即可
第二种的话 至少四个  有中间变量的存储

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2010-10-21 12:16
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:6 
int a=10,b=20;
a=a+b;
printf("a=a+b=%d\n",a);
对就下面的汇编代码
程序代码:
0040B778  |.  C745 FC 0A000>mov     dword ptr [ebp-4], 0A
0040B77F  |.  C745 F8 14000>mov     dword ptr [ebp-8], 14
0040B786  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
0040B789  |.  0345 F8       add     eax, dword ptr [ebp-8]
0040B78C  |.  8945 FC       mov     dword ptr [ebp-4], eax
0040B78F  |.  8B4D FC       mov     ecx, dword ptr [ebp-4]
0040B792  |.  51            push    ecx                              ; /<%d>
0040B793  |.  68 1C004200   push    0042001C                         ; |format = "a=a+b=%d",LF,""
0040B798  |.  E8 D358FFFF   call    printf                           ; \printf
程序代码:
int a=10,b=20;
a+=b;
printf("a+=b=%d\n",a);
对应下面的汇编代码
程序代码:
0040B778  |.  C745 FC 0A000>mov     dword ptr [ebp-4], 0A
0040B77F  |.  C745 F8 14000>mov     dword ptr [ebp-8], 14
0040B786  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
0040B789  |.  0345 F8       add     eax, dword ptr [ebp-8]
0040B78C  |.  8945 FC       mov     dword ptr [ebp-4], eax
0040B78F  |.  8B4D FC       mov     ecx, dword ptr [ebp-4]
0040B792  |.  51            push    ecx                              ; /<%d>
0040B793  |.  68 1C004200   push    0042001C                         ; |format = "a+=b=%d",LF,""
0040B798  |.  E8 D358FFFF   call    printf                           ; \printf

编译环境:VC 6.0
上反汇编代码来看,两都没有区别。




[ 本帖最后由 ioriliao 于 2010-10-21 12:47 编辑 ]

/images/2011/147787/2011051411021524.jpg" border="0" />
2010-10-21 12:21
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:0 
原来是这样

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2010-10-21 12:28
zhabeilove
Rank: 2
等 级:论坛游民
帖 子:26
专家分:28
注 册:2010-9-25
收藏
得分:6 
有区别: 前面效率更高。

如果是 a = (a + b) * c; 则不能写成 a += b * c; 也不能写成 (a += b) * c;
2010-10-21 15:55
yao19890601
Rank: 1
等 级:新手上路
帖 子:4
专家分:6
注 册:2010-10-21
收藏
得分:6 
来学习的
2010-10-21 16:03
Crocodile_JX
Rank: 5Rank: 5
等 级:职业侠客
帖 子:161
专家分:335
注 册:2010-9-13
收藏
得分:6 
个人觉得没有什么区别。不过很多人认为这样写 a+=b 会更好。原因我也不知道。
2010-10-21 16:07
快速回复:初学者的白痴问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.040000 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved