※ 引述《yuwen.bbs@bbs.csie.mcu.edu.tw (陳慾戒~沒義氣~唉)》之銘言:
> ※ 引述《Corroson@kkcity.com.tw (藍月楓鈴)》之銘言:
> : 請問關於 -= 這個算子。
> : 這個算子,是 CPU 的一個指令嗎?
> : 還是說他是右邊的算式先做 負號 然後再加到左邊的變數裡頭中呢?
> : 謝謝!
> 用例子說明比較快..
> int x=5;
> x -= 3; 跟 x = x - 3; 是一樣的..
我知道他的執行結果是一樣的。
因為我的程式需要要求速度,所以想要比較下面兩種寫法哪個比較快:
寫法一:
v = - k * s;
z1 += v; z2 += v; z3 += v;
寫法二:
v = k * s;
z1 -= v; z2 -= v; z3 -= v;
因此我才會問 -= 算子的執行速度如何。
--
┌─────◆程式設計樂園◆─────┐ ◢ ◤ ★ 線上音樂新震撼 ★ ◢ ◤
│ CSZone.kkcity.com.tw │ ^_^ / 隨選隨播免等待 KKBOX◤ ^_^ /
└──《From:140.111.126.20 》──┘ ◤ http://www.kkbox.com.tw ◤
> -------------------------------------------------------------------------- <
作者: scwg (void * I = NULL;) 看板: java
標題: Re: 請問關於 -= 這個算子。
時間: Wed Jul 28 21:33:16 2004
yuwen 大的結果看起來好像沒差, 因為是真的沒差 ^^"
disassembly 的結果:
ldc 0
istore #7
L3:^M
iload #7
ldc 1000000
if_icmpge L55
ldc 1000
istore #2
ldc 10
istore #3
ldc 100000
dup
istore #6
dup
istore #5
istore #4
iload #2
iload #3
imul
istore #1
iload #4
iload #1
isub
istore #4
iload #5
iload #1
isub
istore #5
iload #6
iload #1
isub
istore #6
iinc #7 by 1
goto L3
L55:^M
return
不管用 z1 -= v 還是用 z1 = z1 - v 都是一樣的
但是如果是對常數做減法的話, 對第一個區域變數做運算
a -= 3; 跟 a = a - 3; 分別會變成
iinc #1 by -3
跟
iload #1
ldc 3
isub
istore #1
應該會差很多 :)
※ 引述《yuwen.bbs@bbs.csie.mcu.edu.tw (陳慾戒~沒義氣~唉)》之銘言:
: ※ 引述《Corroson@kkcity.com.tw (藍月楓鈴)》之銘言:
: public class test
: {
: public static void main(String args[]){
: int v,k,s,z1,z2,z3,i;
: for(i=0;i<1000000;i++){
: k = 1000; s = 10; z1 = z2 = z3 = 100000;
: v = k * s;
: z1 -= v; z2 -= v; z3 -= v;
: }
: }
: }
--
-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS/M/TW d- s:++(+) a--->-- C++$ ULB+>++ P++ L++ E---@
W+ N? o? K? w--(++) O-- !M V- PS-(--) PE- Y PGP- t+ 5?
X R !tv b++ DI+ D+ G e h! !r z
------END GEEK CODE BLOCK------
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.20