Linux之运算符与表达式

  1. 一些容易出错的优先级的问题

    优先级问题表达式经常误认为的结果实际结果
    .的优先级高于*,->操作符可以用于解决这个问题*p.f引用操作p所指对象的字段f(*p).f对p取f偏移,作为指针,然后进行接触
    [ ]高于*int*ap[ ]ap是个指向int数组的指针int(*ap)[ ]ap 是个元素为int指针的数组int*(ap[])
    函数()高于*int *fp()fp是个函数指针,所指函数返回int int(*fp)[ ]fp是个函数,返回int * int*(fp())
  2. 逗号表达式中,i在遇到每个逗号后,认为本计算单位已经结束,i这个时候自加。

int x;
int i = 3;
x = (++i, i++, i+10);
 其结果:i = 5, x = 15.后缀运算符是在本计算单位计算结束后再自加或自减。

3.使用位操作可以减少除法和取模的运算,一般的位操作是用来控制硬件的或进行数据变换,但是,灵活的位操作可以有效的提高程序的运行的效率。

//方法一
int i, j;
i = 257/8;
j = 456 % 32;

//方法二
inti,j;
i = 257 >> 3;
j = 456 - (456 >> 4 << 4);

上述的两个方法的效果一样,但是方法二的效率高,原因是方法一调用了取模函数和除法函数,既有很多汇编代码和寄存器参与运算,但是方法二只是几句相关的汇编。所以对于以2的为指数次方“*”、“/”、“%”因子的数学运算,转化为移位运算“<<”、“>>”、通常可以提高算法效率。

4.逻辑运算符 : ||与&&(与按位运算符 |和&是完全不同的)

int i = 0;
int j = 0;
if((++i>0)||(++j>0))
{
     //打印i和j的值。
}    
   结果是i=1; j=0;

逻辑运算符||两边的条件只要有一个为真,其结果就为真的.if((++i>0))||(++j>0))的语句中,先计算(++i>0),发现其结果为真,后面的(++j>0)便不再计算。同样&&运算符也是这种情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值