實驗:(++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