C語言優先級之計算總結

今天在網上博客上發現一個很好的優先級記憶方法,鏈接:http://blog.csdn.net/skywalker_leo/article/details/6237222


此貼用來積累關於優先級的計算:

(1)

    int x = 7,y =3;
    1 ? ++x,++y:--x,--y;
    std::cout<<x<<y;
解:根據優先級,實際代碼執行是這樣的:(1? ++x , ++y : --x),--y。當我在XCode上測試時,編譯器只是提醒了我--x永遠不會執行,結果是83
(2)

int m = 2,n = 3,x = 4,y = 5,z = 6,w = 7;
    if ((m = x > y)&&(n = z > w))
    {
    }
    std::cout<<m<<n;
解:根據&&用法,當&&前面等式爲否時,則if立即判斷爲假,不會執行&&後面語句,結果爲03。附上反彙編代碼,看看關於if(m=0)的實現原理:


即,cmp dword ptr [m] , 0

(3)

int x = 1 ,b = 0;
    if (x++) 
    { 
        b = x +1;
    }
    std::cout<<x<<b;
解:結果爲2,3。當初我一直以爲,x++是在完成一個語句後值纔會發生變化(也就是執行到達一個分號時)但是事實我們來看看反彙編代碼:

反彙編告訴我們,m++處理方式是先存儲m到臨時變量,再對m立即累加,對if語句判斷使用的是存儲在臨時變量中的m值(即累加前的值),後來帶入n計算的是累加後的m值。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章