| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1179 人关注过本帖
标题:自加 自减 运算符的问题
只看楼主 加入收藏
额外覆盖
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:城市猎人
威 望:6
帖 子:1726
专家分:5757
注 册:2012-9-22
收藏
得分:0 
确实 这种自增自减容易出问题  
过后来读在时候容易忘了自增的意义

我现在所学的一切都是为了游戏!!!为了游戏,加油!加油!努力!
2013-07-28 22:39
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用yim在2013-7-28 01:56:28的发言:

#include  
using namespace std;
int main()
{
    int i,j,m,n;
    i=8;
    j=10;
    m=++i+j++;
    n=(++i)+(++j)+m;

    cout<

他这里,描红的两行,第二行比第一行好点,第一行应与下一行用同样的方法,把子项用括号括起来,引导读者回忆++算符的概念(楼主显然没看书就急着做题)。如果实在不行,就把一行的++i和++j拆开了多行写,自己想表达的意图,自己最清楚,是使用变化前的值还是变化后的值,分行写哪有不清楚的道理,根本就不需要强硬使用这种语言独特的算符,难道没这种算符的语言就写不了不成。这种算符,在表达意图很清晰的场合,其实是很好的,但这个代码的例子就是刻意了,谭的书就总教这类代码不好(并非内容不好),考试也总考这种东西,可能都是这么教出来的吧。

分多行写,效率不会比写在一行低,因为编译器会自动优化,不需人工做的,写清晰了才是王道,自己做机器,就是降格把自己不当人看。

[ 本帖最后由 TonyDeng 于 2013-7-28 22:48 编辑 ]

授人以渔,不授人以鱼。
2013-07-28 22:47
yim
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2013-7-28
收藏
得分:0 
回复 8楼 TonyDeng
我问这个问题的时候,自己已经想了一个下午加一个晚上还是没结果才问的。我是不是违反了论坛规则??

晚起的虫儿......
2013-07-28 23:49
yim
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2013-7-28
收藏
得分:0 
回复 12楼 TonyDeng
运算规则的先后顺序和算法的左右顺序想了很久(可能比较笨)。m这行我看了很久才分析出来,确实有括号比较容易理解以及分析。按照您的建议,我做了一些修改,您看这样是不是可以?(或许写出来不简洁,希望指正)

#include <iostream>
using namespace std;
int main()
{
    int i,j,x,y,m,n;
    i=8;
    j=10;
    x=++i;
    y=j++;
    m=x+y;
    n=(++i)+(++j)+m;
    cout<<i<<'\t'<<j<<'\t'<<m<<'\t'<<n<<endl;
    return 0;
}

晚起的虫儿......
2013-07-29 00:10
zhengchen080
Rank: 1
等 级:新手上路
帖 子:21
专家分:3
注 册:2013-7-29
收藏
得分:0 
++i就是先把i加一之后再运算,i++是先运算再把i加一
2013-07-29 12:39
zhengchen080
Rank: 1
等 级:新手上路
帖 子:21
专家分:3
注 册:2013-7-29
收藏
得分:0 
回复 14楼 yim
执行
x=++i;
y=j++;
之后i,j的的值已经改变了
x=i+1;y=j;i=i+1;j=j+1;

[ 本帖最后由 zhengchen080 于 2013-7-29 12:54 编辑 ]
2013-07-29 12:43
yim
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2013-7-28
收藏
得分:0 
回复 16楼 zhengchen080
所以,我写的这个可以么??我运行了一下,结果是一样的,只是不确定是否可以这样写。而且,还有更加简单又明确的写法么?我好想知道。

晚起的虫儿......
2013-07-30 01:17
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
第一行标记红色代码修改后还可以

思考赐予新生,时间在于定义
2013-07-30 01:52
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
楼主还是没有醒悟去看书,我上面都提示你该看书了。搞清楚了++i和i++的运算次序,自然知道代码是什么结果。别以为教编程的书就只看代码,文字远比代码重要,宁愿不看代码也不能不看文字,代码可以在看过文字之后自己写,看人家的代码只能被人牵着走,连属于自己的东西都难得有。

如果书上的文字都不愿去看,那么別人回复帖子的文字也同样不会仔细去看,再怎么解释也是徒劳,因为本来不需在这样的地方重复劳动的。

所谓++算符,无非就是两种区别:

x = i++;
等价于
x = i;
i = i + 1;

x = ++i;
等价于
i = i + 1;
x = i;

也就是说,前缀++和后缀++的区别,就是上面i = i + 1这个功能是放在x = i的前面还是后面。它本身就是两行,不会因为你写一行就比两行高效,编译器编译出来的结果是一样的。记住:源代码和实际执行代码是两回事,实际执行代码往往不是源代码你自以为的那样,在现代编译器和机器环境面前,很多以前的小技巧往往弄巧成拙。不要把心思放在这些东西上面,抓住核心,不要纠缠细节。搞不清楚那些算符的区别,就用最原始的方法,用我上面的两种写法,把自己的真实意图表达出来,即你到底想i = i + 1在什么时候执行,明确地写就是了。

[ 本帖最后由 TonyDeng 于 2013-7-30 15:02 编辑 ]

授人以渔,不授人以鱼。
2013-07-30 14:23
zhengchen080
Rank: 1
等 级:新手上路
帖 子:21
专家分:3
注 册:2013-7-29
收藏
得分:0 
回复 17楼 yim
19楼解释的很清楚啊
2013-08-01 15:51
快速回复:自加 自减 运算符的问题
数据加载中...
 
   



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

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