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值。


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