免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 升腾
打印 上一主题 下一主题

i++与++i  关闭 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-01-05 23:56 |只看该作者
编译器实现相关。

论坛徽章:
0
12 [报告]
发表于 2010-01-06 09:14 |只看该作者
我通过实际的机器做过实验
ubuntu gcc的结果是i=5,j=3
ubuntu  java的结果是i=4,j=4
windows gcc的结果是i=5,j=3

论坛徽章:
8
戌狗
日期:2014-09-26 16:39:44水瓶座
日期:2014-10-10 02:06:57金牛座
日期:2014-10-11 23:04:042015亚冠之首尔
日期:2015-06-23 15:37:0015-16赛季CBA联赛之天津
日期:2016-01-22 18:58:2915-16赛季CBA联赛之佛山
日期:2016-05-31 19:18:0815-16赛季CBA联赛之同曦
日期:2016-08-10 16:26:3315-16赛季CBA联赛之辽宁
日期:2018-01-10 11:47:40
13 [报告]
发表于 2010-01-06 09:21 |只看该作者
无聊的题目

论坛徽章:
0
14 [报告]
发表于 2010-01-06 09:23 |只看该作者

回复 #1 升腾 的帖子

华为也很无聊!!

论坛徽章:
0
15 [报告]
发表于 2010-01-06 09:50 |只看该作者
f*ck HW

论坛徽章:
0
16 [报告]
发表于 2010-01-06 11:25 |只看该作者
原帖由 churchmice 于 2010-1-5 21:54 发表
华为的面试题又咋了
你直接告诉面试官这个是Undefined 的行为就可以了

linux上是5 3
sun上是 4 4
这结果还是跟特定平台特定编译器的特定版本有关的


这个是"未定义"行为
但是我觉得是Unspecified,而非Undefined,不知对不对
对Unspecified和Undefined的具体差别也不太了解

论坛徽章:
80
20周年集字徽章-庆
日期:2020-10-28 14:09:1215-16赛季CBA联赛之北京
日期:2020-10-28 13:32:5315-16赛季CBA联赛之北控
日期:2020-10-28 13:32:4815-16赛季CBA联赛之天津
日期:2020-10-28 13:13:35黑曼巴
日期:2020-10-28 12:29:1520周年集字徽章-周	
日期:2020-10-31 15:10:0720周年集字徽章-20	
日期:2020-10-31 15:10:07ChinaUnix元老
日期:2015-09-29 11:56:3020周年集字徽章-年
日期:2020-10-28 14:14:56
17 [报告]
发表于 2010-01-06 11:52 |只看该作者
真是无聊的题目啊

论坛徽章:
39
白银圣斗士
日期:2015-11-24 10:40:40酉鸡
日期:2015-03-20 14:15:44寅虎
日期:2015-03-20 14:13:59午马
日期:2015-03-20 14:13:16白羊座
日期:2015-03-20 14:12:54金牛座
日期:2015-03-20 14:12:09双子座
日期:2015-03-20 14:11:57巨蟹座
日期:2015-03-20 14:11:44狮子座
日期:2015-03-20 14:11:29亥猪
日期:2015-03-20 14:16:24戌狗
日期:2015-03-20 14:16:40申猴
日期:2015-03-20 14:17:05
18 [报告]
发表于 2010-01-06 11:53 |只看该作者
经过VC调试查看反汇编我得出的结论是(只适用VC)
1.++i  right to left
   i++  left to right
  +  right to left
2.vc中先计算 right to left,再计算 left to right
   vc中,先计算++i,后计算+

看vc源代码:
#include <stdio.h>
void main()
{
int j3=0,j4=0;
        j3 =(j3++)+(++j3)+(j3++)+(j3++)+(++j3)+(j3++)+(j3++)+(++j3)+(j3++)+(j3++)+(++j3)+(j3++)+(j3++)+(++j3)+(j3++)+(j3++)+(++j3)+(j3++);
        ++j4;++j4;++j4;++j4;++j4;++j4;
        j4=j4+j4+j4+j4+j4+j4+j4+j4+j4+j4+j4+j4+j4+j4+j4+j4+j4+j4;
        j4++;j4++;j4++;j4++;j4++;j4++;j4++;j4++;j4++;j4++;j4++;j4++;
        printf("j3 = %d\n",j3);
        printf("j4 = %d\n",j4);

}//j3,j4的结果都是120


对比j3,j4,汇编完全一样


        j3 =(j3++)+(++j3)+(j3++)+(j3++)+(++j3)+(j3++)+(j3++)+(++j3)+(j3++)+(j3++)+(++j3)+(j3++)+(j3++)+(++j3)+(j3++)+(j3++)+(++j3)+(j3++);
004114D0  mov         eax,dword ptr [j3]
004114D3  add         eax,1
004114D6  mov         dword ptr [j3],eax
004114D9  mov         ecx,dword ptr [j3]
004114DC  add         ecx,1
004114DF  mov         dword ptr [j3],ecx
004114E2  mov         edx,dword ptr [j3]
004114E5  add         edx,1
004114E8  mov         dword ptr [j3],edx
004114EB  mov         eax,dword ptr [j3]
004114EE  add         eax,1
004114F1  mov         dword ptr [j3],eax
004114F4  mov         ecx,dword ptr [j3]
004114F7  add         ecx,1
004114FA  mov         dword ptr [j3],ecx
004114FD  mov         edx,dword ptr [j3]
00411500  add         edx,1
00411503  mov         dword ptr [j3],edx
00411506  mov         eax,dword ptr [j3]
00411509  add         eax,dword ptr [j3]
0041150C  add         eax,dword ptr [j3]
0041150F  add         eax,dword ptr [j3]
00411512  add         eax,dword ptr [j3]
00411515  add         eax,dword ptr [j3]
00411518  add         eax,dword ptr [j3]
0041151B  add         eax,dword ptr [j3]
0041151E  add         eax,dword ptr [j3]
00411521  add         eax,dword ptr [j3]
00411524  add         eax,dword ptr [j3]
00411527  add         eax,dword ptr [j3]
0041152A  add         eax,dword ptr [j3]
0041152D  add         eax,dword ptr [j3]
00411530  add         eax,dword ptr [j3]
00411533  add         eax,dword ptr [j3]
00411536  add         eax,dword ptr [j3]
00411539  add         eax,dword ptr [j3]
0041153C  mov         dword ptr [j3],eax
0041153F  mov         ecx,dword ptr [j3]
00411542  add         ecx,1
00411545  mov         dword ptr [j3],ecx
00411548  mov         edx,dword ptr [j3]
0041154B  add         edx,1
0041154E  mov         dword ptr [j3],edx
00411551  mov         eax,dword ptr [j3]
00411554  add         eax,1
00411557  mov         dword ptr [j3],eax
0041155A  mov         ecx,dword ptr [j3]
0041155D  add         ecx,1
00411560  mov         dword ptr [j3],ecx
00411563  mov         edx,dword ptr [j3]
00411566  add         edx,1
00411569  mov         dword ptr [j3],edx
0041156C  mov         eax,dword ptr [j3]
0041156F  add         eax,1
00411572  mov         dword ptr [j3],eax
00411575  mov         ecx,dword ptr [j3]
00411578  add         ecx,1
0041157B  mov         dword ptr [j3],ecx
0041157E  mov         edx,dword ptr [j3]
00411581  add         edx,1
00411584  mov         dword ptr [j3],edx
00411587  mov         eax,dword ptr [j3]
0041158A  add         eax,1
0041158D  mov         dword ptr [j3],eax
00411590  mov         ecx,dword ptr [j3]
00411593  add         ecx,1
00411596  mov         dword ptr [j3],ecx
00411599  mov         edx,dword ptr [j3]
0041159C  add         edx,1
0041159F  mov         dword ptr [j3],edx
004115A2  mov         eax,dword ptr [j3]
004115A5  add         eax,1
004115A8  mov         dword ptr [j3],eax

==================================================================================================

        ++j4;++j4;++j4;++j4;++j4;++j4;
004115AB  mov         eax,dword ptr [j4]
004115AE  add         eax,1
004115B1  mov         dword ptr [j4],eax
004115B4  mov         eax,dword ptr [j4]
004115B7  add         eax,1
004115BA  mov         dword ptr [j4],eax
004115BD  mov         eax,dword ptr [j4]
004115C0  add         eax,1
004115C3  mov         dword ptr [j4],eax
004115C6  mov         eax,dword ptr [j4]
004115C9  add         eax,1
004115CC  mov         dword ptr [j4],eax
004115CF  mov         eax,dword ptr [j4]
004115D2  add         eax,1
004115D5  mov         dword ptr [j4],eax
004115D8  mov         eax,dword ptr [j4]
004115DB  add         eax,1
004115DE  mov         dword ptr [j4],eax
        j4=j4+j4+j4+j4+j4+j4+j4+j4+j4+j4+j4+j4+j4+j4+j4+j4+j4+j4;
004115E1  mov         eax,dword ptr [j4]
004115E4  add         eax,dword ptr [j4]
004115E7  add         eax,dword ptr [j4]
004115EA  add         eax,dword ptr [j4]
004115ED  add         eax,dword ptr [j4]
004115F0  add         eax,dword ptr [j4]
004115F3  add         eax,dword ptr [j4]
004115F6  add         eax,dword ptr [j4]
004115F9  add         eax,dword ptr [j4]
004115FC  add         eax,dword ptr [j4]
004115FF  add         eax,dword ptr [j4]
00411602  add         eax,dword ptr [j4]
00411605  add         eax,dword ptr [j4]
00411608  add         eax,dword ptr [j4]
0041160B  add         eax,dword ptr [j4]
0041160E  add         eax,dword ptr [j4]
00411611  add         eax,dword ptr [j4]
00411614  add         eax,dword ptr [j4]
00411617  mov         dword ptr [j4],eax
        j4++;j4++;j4++;j4++;j4++;j4++;j4++;j4++;j4++;j4++;j4++;j4++;
0041161A  mov         eax,dword ptr [j4]
0041161D  add         eax,1
00411620  mov         dword ptr [j4],eax
00411623  mov         eax,dword ptr [j4]
00411626  add         eax,1
00411629  mov         dword ptr [j4],eax
0041162C  mov         eax,dword ptr [j4]
0041162F  add         eax,1
00411632  mov         dword ptr [j4],eax
00411635  mov         eax,dword ptr [j4]
00411638  add         eax,1
0041163B  mov         dword ptr [j4],eax
0041163E  mov         eax,dword ptr [j4]
00411641  add         eax,1
00411644  mov         dword ptr [j4],eax
00411647  mov         eax,dword ptr [j4]
0041164A  add         eax,1
0041164D  mov         dword ptr [j4],eax
00411650  mov         eax,dword ptr [j4]
00411653  add         eax,1
00411656  mov         dword ptr [j4],eax
00411659  mov         eax,dword ptr [j4]
0041165C  add         eax,1
0041165F  mov         dword ptr [j4],eax
00411662  mov         eax,dword ptr [j4]
00411665  add         eax,1
00411668  mov         dword ptr [j4],eax
0041166B  mov         eax,dword ptr [j4]
0041166E  add         eax,1
00411671  mov         dword ptr [j4],eax
00411674  mov         eax,dword ptr [j4]
00411677  add         eax,1
0041167A  mov         dword ptr [j4],eax
0041167D  mov         eax,dword ptr [j4]
00411680  add         eax,1
00411683  mov         dword ptr [j4],eax

[ 本帖最后由 rover12421 于 2010-1-6 13:30 编辑 ]

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
19 [报告]
发表于 2010-01-06 11:55 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
39
白银圣斗士
日期:2015-11-24 10:40:40酉鸡
日期:2015-03-20 14:15:44寅虎
日期:2015-03-20 14:13:59午马
日期:2015-03-20 14:13:16白羊座
日期:2015-03-20 14:12:54金牛座
日期:2015-03-20 14:12:09双子座
日期:2015-03-20 14:11:57巨蟹座
日期:2015-03-20 14:11:44狮子座
日期:2015-03-20 14:11:29亥猪
日期:2015-03-20 14:16:24戌狗
日期:2015-03-20 14:16:40申猴
日期:2015-03-20 14:17:05
20 [报告]
发表于 2010-01-06 11:57 |只看该作者
在java中,i++,++i都是 right to left
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP