码迷,mamicode.com
首页 > 其他好文 > 详细

浅谈位运算

时间:2015-01-14 19:53:54      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:

      位运算算是从汇编语言一代传下来的老东西了,只有寥寥6个运算符。乍一看,你会说它没什么用处,那么你只对了一半:站在现在的高级编程角度来讲,确实用处不大;但是在涉及硬件底层的编程(如驱动程序,嵌入式开发)里,需要很强的操纵硬件能力,这时,就常常涉及到位运算。

      位运算有6个运算符,它们分别是:&(与)、|(或)、^(异或)、~(取反)、>>(右移)、<<(左移)。其含义如下表所示:

运算符 含义
& 按位与
| 按位或
^ 按位异或
~ 取反
<< 左移
>> 右移

      笔者也是因为单片机才接触位运算的。但是总不能把Atmega128点亮LED的例程作为例子讲解。接下来,以几个实用的例子助你登入位运算的大门:

      例1.判断一个数的奇偶性:常常会遇到判断一个数奇偶的情况,这时候,常用的方法是模2取余。这种方法的效率略慢(虽然只是常数),可以用位运算取代。方法是将这个数与1进行与运算。这样,如果结果是1,即为奇数,否则就是偶数。原理:与1进行与运算即取操作数的第1位,而第一位是1,则数为奇数,否则数为偶数。

      例2.交换两个整数:如果这两个整数是x和y,那么最常用的方法就是使用临时变量tmp,先将x赋值给tmp,再将y赋值给x,最后将tmp赋值给y。这样的方法无疑需要更多内存。而下面的方法则不用那个讨厌的临时变量。

       x ^= y; 
       y ^= x; 
       x ^= y;

神奇吧?原理?只要记住异或的反操作是自己。对一个操作数进行两次相同的异或操作,最后会回到原来的值。

      例3.看下面那段简单的代码:

      if (x == a) x= b; 
                else x=a;

这段代码也可以使用位运算来改变。让它变得,额…更有逼格。它等价于:

      x=a^b^x;

      ……其实位运算的例子不止这么点,包括子网掩码,iostream的状态等也用到了这个运算。而它的执行速度是固然比其他运算快的(毕竟计算机基于2进制)。所以,卡常量的朋友们,你们可以试试--

浅谈位运算

标签:

原文地址:http://www.cnblogs.com/Darksun/p/4224694.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!