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


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值