天天看點

實驗:(++i)+(++i)+(++i) 與 (i++)+(i++)+(i++)

             實驗:(++i)+(++i)+(++i) 與 (i++)+(i++)+(i++)

1.實驗目标:通過實驗得出影響(++i)+(++i)+(++i)與(i++)+(i++)+(i++)計算結果的主要因素

2.實驗方法:在兩套不同的硬體平台 ( Inter平台和AMD平台 ) 上測試3種編譯器 (VC++6.0                     TURBO C 2.0    JAVA 2 Platform JDK) 的運算結果

第一部分: AMD平台下的測試

代碼一:

#include <stdio.h>

void main()

{

    int i = 3,sum;

    sum = (++i)+(++i)+(++i);  

    printf("i = %d , sum = %d /n",i,sum);

}

實驗環境1: AMD Athlon64 2800+ (754Pin)

            Windows Vista Ultimate (32bit)

            Virsual C++ 6.0 Enterprise (SP6)

運作結果:   i = 6 , sum = 16

Disassembly Code:

0040107F  mov        eax,dword ptr [ebp-4]

00401082  add        eax,1

00401085  mov        dword ptr [ebp-4],eax

00401088  mov        ecx,dword ptr [ebp-4]

0040108B  add        ecx,1

0040108E  mov        dword ptr [ebp-4],ecx

00401091  mov        edx,dword ptr [ebp-4]

00401094  add        edx,dword ptr [ebp-4]

00401097  mov        eax,dword ptr [ebp-4]

0040109A  add        eax,1

0040109D  mov        dword ptr [ebp-4],eax

004010A0  add        edx,dword ptr [ebp-4]

004010A3  mov        dword ptr [ebp-8],edx

實驗環境2: AMD Athlon64 2800+ (754Pin)

            Windows Vista Ultimate (32bit)

            Borland Turbo C 2.0

運作結果:  i = 6 , sum = 18

實驗環境3: AMD Athlon64 2800+ (754Pin)

            Windows Vista Ultimate (32bit)

            JAVA Development Kit 1.6.0_03

JAVA類似代碼:

          public class Test

  {

                           public static void main(String[] args)

                            {

                                          int i = 3,sum;

                               sum = (++i)+(++i)+(++i);

                                          System.out.println("i = "+i+" , sum = "+sum);

                            }

  }

運作結果:  i = 6 , sum = 15

代碼二:

#include <stdio.h>

void main()

{

   int i = 3,sum;

    sum = (i++)+(i++)+(i++);  

    printf("i = %d , sum = %d /n",i,sum);

}

實驗環境1: AMD Athlon64 2800+ (754Pin)

            Windows Vista Ultimate (32bit)

            Virsual C++ 6.0 Enterprise (SP6)

運作結果:  i = 6 , sum = 9

Disassembly Code:

0040107F  mov        eax,dword ptr [ebp-4]

00401082  add        eax,dword ptr [ebp-4]

00401085  add        eax,dword ptr [ebp-4]

00401088  mov        dword ptr [ebp-8],eax

0040108B  mov        ecx,dword ptr [ebp-4]

0040108E  add        ecx,1

00401091  mov        dword ptr [ebp-4],ecx

00401094  mov        edx,dword ptr [ebp-4]

00401097  add        edx,1

0040109A  mov        dword ptr [ebp-4],edx

0040109D  mov        eax,dword ptr [ebp-4]

004010A0  add        eax,1

004010A3  mov        dword ptr [ebp-4],eax

實驗環境2: AMD Athlon64 2800+ (754Pin)

            Windows Vista Ultimate (32bit)

            Borland Turbo C 2.0

運作結果:   i = 6 , sum = 9

實驗環境3: AMD Athlon64 2800+ (754Pin)

            Windows Vista Ultimate (32bit)

            JAVA Development Kit 1.6.0_03

JAVA類似代碼:

          public class Test

  {

                           public static void main(String[] args)

                            {

                                          int i = 3,sum;

                               sum = (i++)+(i++)+(i++);

                                          System.out.println("i = "+i+" , sum = "+sum);

                            }

  }

運作結果:  i = 6 , sum = 12

第二部分: Intel平台下的測試

代碼一:

#include <stdio.h>

void main()

{

    int i = 3,sum;

    sum = (++i)+(++i)+(++i);  

    printf("i = %d , sum = %d /n",i,sum);

}

實驗環境1: Inter Celeron 331(2.66Hz,LGA775,90nm)

            Windows Server 2003 Enterprise Edition (32bit)

            Virsual C++ 6.0 Enterprise (SP6)

運作結果:   i = 6 , sum = 16

Disassembly Code:

0040102F   mov         eax,dword ptr [ebp-4]

00401032   add         eax,1

00401035   mov         dword ptr [ebp-4],eax

00401038   mov         ecx,dword ptr [ebp-4]

0040103B   add         ecx,1

0040103E   mov         dword ptr [ebp-4],ecx

00401041   mov         edx,dword ptr [ebp-4]

00401044   add         edx,dword ptr [ebp-4]

00401047   mov         eax,dword ptr [ebp-4]

0040104A   add         eax,1

0040104D   mov         dword ptr [ebp-4],eax

00401050   add         edx,dword ptr [ebp-4]

00401053   mov         dword ptr [ebp-8],edx

實驗環境2: Inter Celeron 331(2.66Hz,LGA775,90nm)

            Windows Server 2003 Enterprise Edition (32bit)

            Borland Turbo C 2.0

運作結果:  i = 6 , sum = 18

實驗環境3: Inter Celeron 331(2.66Hz,LGA775,90nm)

            Windows Server 2003 Enterprise Edition (32bit)

            JAVA Development Kit 1.6.0_03

JAVA類似代碼:

          public class Test

  {

                           public static void main(String[] args)

                            {

                                          int i = 3,sum;

                               sum = (++i)+(++i)+(++i);

                                          System.out.println("i = "+i+" , sum = "+sum);

                            }

  }

運作結果:  i = 6 , sum = 15

代碼二:

#include <stdio.h>

void main()

{

   int i = 3,sum;

    sum = (i++)+(i++)+(i++);  

    printf("i = %d , sum = %d /n",i,sum);

}

實驗環境1: Inter Celeron 331(2.66Hz,LGA775,90nm)

            Windows Server 2003 Enterprise Edition (32bit)

            Virsual C++ 6.0 Enterprise (SP6)

運作結果:  i = 6 , sum = 9

Disassembly Code:

0040102F   mov         eax,dword ptr [ebp-4]

00401032   add         eax,dword ptr [ebp-4]

00401035   add         eax,dword ptr [ebp-4]

00401038   mov         dword ptr [ebp-8],eax

0040103B   mov         ecx,dword ptr [ebp-4]

0040103E   add         ecx,1

00401041   mov         dword ptr [ebp-4],ecx

00401044   mov         edx,dword ptr [ebp-4]

00401047   add         edx,1

0040104A   mov         dword ptr [ebp-4],edx

0040104D   mov         eax,dword ptr [ebp-4]

00401050   add         eax,1

00401053   mov         dword ptr [ebp-4],eax

實驗環境2: Inter Celeron 331(2.66Hz,LGA775,90nm)

            Windows Server 2003 Enterprise Edition (32bit)

            Borland Turbo C 2.0

運作結果:   i = 6 , sum = 9

實驗環境3:Inter Celeron 331(2.66Hz,LGA775,90nm)

           Windows Server 2003 Enterprise Edition (32bit)

           JAVA Development Kit 1.5.0_04

JAVA類似代碼:

          public class Test

  {

                           public static void main(String[] args)

                            {

                                          int i = 3,sum;

                               sum = (i++)+(i++)+(i++);

                                          System.out.println("i = "+i+" , sum = "+sum);

                            }

  }

運作結果:  i = 6 , sum = 12