Chinaunix首页 | 论坛 | 博客
  • 博客访问: 534839
  • 博文数量: 86
  • 博客积分: 1076
  • 博客等级: 准尉
  • 技术积分: 1018
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-02 19:15
文章分类

全部博文(86)

文章存档

2013年(15)

2012年(69)

2011年(2)

分类: C/C++

2013-05-07 11:18:38

    例如有一个32bit的整型数data,要求任意交换m位和n位,其中m != n, m, n在0~31之间,要求用宏来定义这个功能

    写法:

  1. #include <stdio.h>

  2. #define bswap(data, m, n)    \
  3.     (data & (1 << m)) == (data & (1 << n)) ? data : data ^ ((1 << m) | (1 << n))

  4. void main(void)
  5. {
  6.     int data = 4;
  7.     
  8.     int m = 2, n = 3;

  9.     //0000 0000 0000 0100
  10.     //exchange bit2 and bit3
  11.     //0000 0000 0000 1000
  12.     //8
  13.     
  14.     printf("%d -> bswap(2, 3) -> %d\n", data, bswap(data, m, n));
  15. }
    这个写法的巧妙之处就是利用异或运算来进行所谓的比特位交换,那段宏的大意是,如果两个比特位相同,自然就是返回原始的data,如果两个比特位不同,那么
就是将原来的0变为1,1变为0, 那么就可以将该比特位与1异或即可以取反了。



阅读(2967) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~