找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

初学C51单片机,遇到个奇怪的C语言问题

查看数: 6685 | 评论数: 48 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2019-6-3 16:43

正文摘要:

int x=0,y=0; y=x++; 按道理x=1,y=0 实际结果都是0 麻烦大家有空帮我看看,问题在哪,先谢了

回复

ID:428991 发表于 2019-6-20 15:41
printf输出之后实际结果是x=1,y=0
ID:491053 发表于 2019-6-20 12:07
x++是实现x自增,但是返回x原来的值的,
ID:400515 发表于 2019-6-20 11:54
这个是先赋值再加,++i是先加再赋值的
ID:566445 发表于 2019-6-20 09:46
是对的 你先看看那个++ -- 的运算
ID:365802 发表于 2019-6-20 08:08
++X, 表示先自加, 再进行运算, 而 X++表示先运算, 后自加.
ID:567297 发表于 2019-6-19 22:04
完全是正确的,可能是你的编译器有问题,或者你操作失误,我用的Codeblocks

27($(UN9YF2%@XW9XK$LJ$1.png (22.91 KB, 下载次数: 132)

27($(UN9YF2%@XW9XK$LJ$1.png

GA%T[5H_XB_3N_E}3Q%8W6R.png (250.23 KB, 下载次数: 139)

GA%T[5H_XB_3N_E}3Q%8W6R.png
ID:567297 发表于 2019-6-19 22:01
不呀,完全没有错。可能是你的编译器有问题,我用Codeblocks运行后,输出X=1,Y=0
ID:567103 发表于 2019-6-19 18:23
运算优先级的问题?,++跟赋值号的优先级的优先问题,实际应用最简单的办法就是分开2行或者加个括号什么的.根本没必要去记那些运算优先级... 像这样写 x++; y=x; 就肯定不会有问题了.
ID:565756 发表于 2019-6-19 12:17
应该是所用软件的规则不一样吧。可能平台不支持这种语法
ID:562123 发表于 2019-6-13 21:02
把++的语法好好复习一下吧
ID:560178 发表于 2019-6-13 17:17
这是对的
ID:560178 发表于 2019-6-13 17:15
x++,是x先取值0、就是y=0,然后x再自加1,x=1了;
ID:532564 发表于 2019-6-13 17:12
x++是先取x的值 再执行x=x+1   你想要预期结果的话要写y=++x
ID:448860 发表于 2019-6-12 22:30
y应该是y=y++吧
ID:451448 发表于 2019-6-12 22:20
优先级不一样,++的优先级小于=的优先级
ID:549556 发表于 2019-6-12 20:43
是对的哦 ,建议你看下程序有没有错误
ID:368940 发表于 2019-6-12 20:11
是先x赋给y,然后x自加1
ID:561132 发表于 2019-6-12 18:35
y=x++是先用再+1    y=++x才是+1再用
ID:561132 发表于 2019-6-12 18:34
y=x++是先用x=0再在+1
ID:516571 发表于 2019-6-8 10:57
把两个+号放在x的左边就是先算x+1的值赋给y
ID:557357 发表于 2019-6-7 21:10
这题很简单  首先x,y初值都是零,执行y=x++这个语句时  因为x++是先把值给y  自身才加一  所以y=0,然后x++这个语句只是单纯的  实际上x没有得到值所以还是为零  不知道这样说你能不能明白
ID:316256 发表于 2019-6-7 15:47
运算优先级的问题
ID:514901 发表于 2019-6-7 11:43
int x=0,y=0;     y=x++;   printf(“x=%d,y=%d”,x,y);  就会看到x=1,y=0
ID:555552 发表于 2019-6-6 00:01
+号在右边
ID:556073 发表于 2019-6-5 22:39
这个问题有点难
ID:93224 发表于 2019-6-5 17:45
是0就对了
ID:461604 发表于 2019-6-5 09:56
y = ++x,相当于 x=x+1; y= x;
y = x++,相当于 y = x; x=x+1;
ID:245771 发表于 2019-6-5 09:05
建议详细查看c基础,查阅运算符结合规则,然后编程实践
ID:550032 发表于 2019-6-4 21:39
“++”放在左边才是1,放在右边是先赋值再计算
ID:493864 发表于 2019-6-4 19:32
加号在右边,那是先进行赋值在加一,所以执行语句后值不改变
ID:511890 发表于 2019-6-4 18:09
z43218 发表于 2019-6-4 09:52
接下来,我把代码,j=i++;改为 i++; 也就是说,去掉j=,所有代码就全部编译了,而且结果也正确。

也不知 ...

经过测试,这是Keil的坑。感觉所有的等式刚开始都不会被执行,只有++的变量被调用了,才会执行。
如下修改成下面就好了。
        int i,j,k;
        i=0;
        j=0;
        j=i++;
        k=i;
        LED =0;
        while(1);
ID:139042 发表于 2019-6-4 12:09
这个是keil的代码优化的结果,x和y对整个程序无实际意义,kei给优化掉了。你可以试着改改优化等级。
ID:123289 发表于 2019-6-4 11:25
没有什么为什么,就是编译平台的定义,换个平台或许就可以。
所以,用KELL,就看KELL的的规定!
尽可采用“不会引起岐义方式写程序”
不过某些老师,为了显摆自己,就是欢喜搞一些易歧义问题来坑人。
ID:552592 发表于 2019-6-4 10:59
++和--在后面,先赋值再++。在前面先++再赋值
ID:554383 发表于 2019-6-4 09:38
单纯从规范的角度,不建议这种写法。
ID:554341 发表于 2019-6-4 09:15
这个不奇怪,你用x++ ,这个是先赋值给y 才加一
x++与++x的区别,y=x++;表示x先对y赋值然后再自+1,y=++x;表示x先自+1然后再对y赋值。
++符号,在变量名的右边,是先取值、再自加1,即先把x值给y、x再自加1

ID:158375 发表于 2019-6-4 08:31
楼主应该先看看C运算的优先级,运算优先级搞不清楚,其他都是瞎扯。

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表