精華區beta java 關於我們 聯絡資訊
※ 引述《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