經常遇到一連串的 i++ 或者 ++i 相加,問最後執行的結果和 i 的值
i.g
int i = -1;
int y = 0;
y = i++ + ++i;
分析一下它的彙編**(沒有經過優化):
subl $40, %esp ; 分配40位元組
movl $1, -16(%ebp) ; 儲存 i
movl $0, -12(%ebp) ; 儲存 y
movl -16(%ebp), %eax ; 這3步執行 i++
leal 1(%eax), %edx
movl %edx, -16(%ebp)
addl $1, -16(%ebp) ; 這2步執行 ++i
movl -16(%ebp), %edx
addl %eax, %edx ; 相加操作
movl %edx, -12(%ebp) ; 結果寫回 y
可以看出執行 i++ 需要3步,執行 ++i 需要2步,而且修改 i 值的位置是不一樣的.
這也是為什麼再寫for迴圈的時候,++i 的效率會比 i++ 高.
i 與 i的區別
public class test static int x,y public static void main string args public static void mymethod 選項 compiletime error prints 1 prints 2 prints 3 print...
i 與 i的區別
今天在寫題的時侯在 i與i 上遇到了麻煩,具體就是我在寫乙個迴圈語句時因為沒有弄清楚i 與 i的區別而導致的錯誤。之前對於i 與 i的使用都只侷限於如下方式 for j 2 j 9 j for j 2 j 9 j 這樣使用好像兩者並沒有什麼區別。然而當我像下面這樣用時卻出了問題 for j i,t ...
自增 i與i 自減 i與i
a 前置自增 變數值先 1,再計算表示式的值 前自增,先增再用 a 後置自增 先計算表示式的值 變數值後 1 後自增,先用再增 a 後置自減 先計算表示式的值 變數值後 1 後自減,先用再減 a 前置自減 變數值先 1,再計算表示式的值 前自減,先減再用 當自增自減遇上邏輯與和邏輯或 因邏輯與一非即...