測試環境:CPU :i
問題一:到底是乘法效率高
一些書籍記錄乘法效率比除法效率高
C代碼:
[cpp]
#include <stdio
#include <time
main(){
long count =
float test =
int start_time
start_time = clock();
while(
test /=
end_time = clock();
printf(
getchar();
}
測試結果:平均在
當我們把測試代碼test /=
測試結果:平均在:
符合我們的期望值
再來看看同樣的代碼在JAVA上運行:
[java]
public class FuHaoCeshi {
public static void main(String[] args){
int count =
long start_time =
long end_time =
float test =
start_time = System
while(
test /=
end_time = System
System
count =
start_time = System
while(
test *=
end_time = System
System
}
}
測試結果:
test /=
test *=
結果竟然與VC測試下的結果完全相反!除法效率居然更高
問題二:長整型會造成時間翻倍?
我們把問題一JAVA程序中測試代碼改成賦值運算:
[java]
public class FuHaoCeshi {
public static void main(String[] args){
int count =
long start_time =
long end_time =
int test =
start_time = System
while(
test =
end_time = System
System
}
}
測試結果:
test =
接下來我們把上述程序中int count改成long count看看結果:
測試結果:
test =
納尼!時間居然翻倍了!
接下來用同樣的代碼用C語言測試:
兩次結果都在
經xuchao
問題三:除法和取模運算開銷真的大嗎?
取模是由除法實現的
測試結果:
test%=
而java測試結果:
test % =
test =
這個原因其實很好想
測試結果
test %=
但這不是重點
[cpp]
#include <stdio
#include <time
main(){
int count =
int test =
int start_time
start_time = clock();
while(
test %=
end_time = clock();
printf(
getchar();
}
測試結果:
test%=
於是我測試了 test%=
這編譯器怎麼優化成一樣的時間消耗?同樣的CPU
下面還有幾個其他的小問題:
為什麼說C是執行效率最高的高級語言
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26780.html