ccc 與 dd 的結果為什麼一樣

2022-11-30 01:06:23 字數 1056 閱讀 3522

1樓:匿名使用者

3全部第一個c程式:

int main()

對應的彙編:

movl $1, %ebx

leal (%ebx,%ebx), %eaxincl %ebx

leal (%eax,%ebx), %esiincl %ebx

incl %ebx

movl %esi, 4(%esp)

movl $lc0, (%esp)

call _printf

第2個c程式:

int main()

對應的彙編:

movl $1, %ebx

incl %ebx

leal (%ebx,%ebx), %esiincl %ebx

movl %esi, 4(%esp)

movl $lc0, (%esp)

call _printf

%esi 在這兩個彙編中的確都是4,為什麼編譯器這麼處理,不知道。

2樓:匿名使用者

(c++)+(c++)+(++c)是1+1+2(d++)+(++d)為2+2;這裡的前置已經加1了前置在當前語句值加1;

後置不加1, 懂?

3樓:匿名使用者

這個,我真看不出兩個式子的結果會相等

我覺得絕大部分編譯器的結果是不相等

編譯器造成的不確定性只在於括號內的幾個式子的計算順序的問題

4樓:匿名使用者

c++是先用c的值 然後再加1 ++c是先把c的值加1 在進行運算 你那個d的話我也搞不明白了 d初始值也是1 如果是(++d)+(d++)我就明白 但是你先後加加d那就是3才對

5樓:紅酒難喝

我覺得是不是這樣啊?編譯器為了使(++d)+(d++)跟(d++)+(++d)的結果一致,所以對於這種演算法就預設成為使(++d)前置,而加法的順序是先左後右,所以(c++)+(c++)+(++c)就先算的(d++)+(d++),得出值後再和(++d)求和,求和時再把(++d)前置。我打亂順序試驗了一下,貌似是這樣

為什麼每次執行rand的結果都一樣

include srand time 0 rand 上述 每秒變一次,如果想每1 1000000秒變一次,加分 在使用rand前加randomize rand函式不是真正的隨機數生成器,而srand 會設定供rand 使用的隨機數種子。如果你在第一次呼叫rand 之前沒有呼叫srand 那麼系統會為...

為什麼我塔羅牌占卜婚姻,每次的結果基本一樣,占卜的都是同我認識的人

信則有不信則無,心就是一種緣分,一種感覺。愛是不需要理由的,走好人生的每一步。你再作幾次占卜,結果都不會相同的。迷信點來說,每次占卜都有先後,先會影響後。科學來說,塔羅牌的主要作用是來自塔羅師。可即是同一個塔羅師作先後,還是會不一樣的。已經註定的結果,你占卜再多次都一樣的 說明你的命運就是那樣了 塔...

用C為什麼43和4030結果不一樣

include int main 編譯輸出 root localhost test makegcc wall g 2.c o 2 root localhost test 24 3 1 4.0 3.0 1 4.0 3.0 1.000000 4 3 1.000000 root localhost tes...