运算符之趣

       C/C++里面的运算符只是那个语言系统里面的一个基础小集合,但是作用却无可替代;因为它们是基础性的东西,所以看起来比较平淡,常常在运算符所操纵的类型需要小心谨慎的时候能够得到小心对待,在C++中也会因为需要运算符重载的情境而变得复杂。但是,个人赶脚,在普通应用中,运算符们有时候也像小精灵一样,有着令人耳目清新的生命力。

       很多人的经验中,C/C++能够高效优雅地执行一些运算,比如位移运算,从而可以对消耗较高的运算——如乘除法,执行效率上的优化。那么,我们来点点三个小精灵吧。

 

  • 位与——"&"

       《编程之美》中有这样一道小题:给定一个字节长的无符号整形数,求其二进制中“1”的个数。

        然后就有一个简洁的函数来完成:

 

int count(BYTE v)

{

        int num = 0;

        while(v)

        {

                v &= (v - 1);

                ++num;

        }

        return num;

}


      值得玩味吧?怎么办到的,怎么想到的......纸上比画比画就明朗了。

 

  • 异或——"^"

      现在有两个整数x和y,我们需要交换它们的值,写个以指针或者引用作参数的swap( )函数吗?经典!但是下面的做法又如何?

        x = x^y;

        y = x^y;

        x = x^y;

      《ComputerSystems.A Programmer's Perspective》教导我们:这不能带来什么性能上的优异,但是提供了一种新的方法,多一条路,世界更宽敞了。但是,异或的生命力不单在开拓这个新思路上,强烈的赶脚......但是,我还没想到好的例子

 

  • 逻辑与——"&&"

      有这么一道小题:请写一个函数——int print_num(int k){};     要求函数功能为打印k的降序,直到0结束,即如果k=5,便打印:5  4  3  2  1  0   
      要求: 不能用 if,  if else,  switch,  ?:  ,  while,  for , do while,  goto 语句

      看看逻辑与是怎么华丽地完成任务的吧!

int print_num(int k)

{

        printf("%d",k);

        k && print_num(k - 1);

        return k;

}


       其实,对于这个小贴子的收尾,我不知所措,因为我赶脚到,小精灵们的生命一直在跳跃着,催促着我们去发现,体味和欣赏。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值