鱼C论坛

 找回密码
 立即注册
查看: 2833|回复: 12

[技术交流] 小甲鱼视频疑问?!

[复制链接]
发表于 2014-1-13 23:50:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在C语言第二章第5节视频第15分钟左右的视频中,所讲的逗号运算怎么和我编译的不一样? 1.png
他是取右边的b+c复制给y.
我的编译器怎么是取最左边的表达式给y?
什么原因?求解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-1-13 23:54:01 | 显示全部楼层
兄弟  你注意一下运算符的优先级 就能知道是怎么回事了  希望对你有帮助:loveliness::loveliness::loveliness:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-13 23:59:24 | 显示全部楼层
那我的答案是y=6,x=6啊??
怎么回事情啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-1-14 10:44:01 | 显示全部楼层
int a=2,b=4,c=6,x,y;
00CD162E  mov         dword ptr [a],2  
00CD1635  mov         dword ptr [b],4  
00CD163C  mov         dword ptr [c],6  
        y=(x=a+b),(b+c);
00CD1643  mov         eax,dword ptr [a]  
00CD1646  add         eax,dword ptr [b]  
00CD1649  mov         dword ptr [x],eax  
00CD164C  mov         ecx,dword ptr [x]  
00CD164F  mov         dword ptr [y],ecx  
        printf("y=%d,x=%d",y,x);
00CD1652  mov         esi,esp  
00CD1654  mov         eax,dword ptr [x]  
00CD1657  push        eax  
00CD1658  mov         ecx,dword ptr [y]  
00CD165B  push        ecx  
        printf("y=%d,x=%d",y,x);
00CD165C  push        0CD6910h  
00CD1661  call        dword ptr ds:[0CDA2E8h]  
00CD1667  add         esp,0Ch  
00CD166A  cmp         esi,esp  
00CD166C  call        __RTC_CheckEsp (0CD1163h)  

        return 0;
00CD1671  xor         eax,eax  

看了下汇编,好像b+c 编译器没去理会哦
我的是vs2012 ,同学在vc6下去试试看,看下反汇编
编译器理解b+c相当于是个空语句了
也确实是啊,b+c的结果都不需要了,如果编译器编译进去了,那这个发明编译器的人就是有点问题了
只是让cpu做了下b+c然后,啥都没干
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-14 11:04:28 | 显示全部楼层
那就是说小甲鱼的视频说的不对?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-1-14 11:06:17 | 显示全部楼层
小甲鱼用的估计是vc6吧,编译器有出入的,vc6的同学大伙看下反汇编
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-14 11:07:27 | 显示全部楼层
我用的就是6.0的哦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-1-26 09:34:23 | 显示全部楼层
甲鱼兄的视频是将(x=a+b)作为表达式1、(b+c)当做表达式2,所以y最后会等于表达式2的值,而您的编译器直接将y=(x=a+b)当做表达式1的值,所以是表达式1的值了。不过甲鱼兄的视频确实有一点问题,因为按照标准的优先级来说,逗号运算符属于最低优先级,比=还要低,所以进行左边的赋值一般应该是正确的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-26 09:45:51 | 显示全部楼层
那问问甲鱼哥是不是他说错了!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-1-26 09:54:36 | 显示全部楼层
支持楼主谢谢分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-1-26 10:38:53 | 显示全部楼层
拿来看看咯
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-1-26 11:08:21 | 显示全部楼层
拿来看看咯
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-1-26 11:11:27 | 显示全部楼层
拿来看看咯
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 23:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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