Chinaunix首页 | 论坛 | 博客
  • 博客访问: 12876680
  • 博文数量: 1293
  • 博客积分: 13501
  • 博客等级: 上将
  • 技术积分: 17974
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-08 18:11
文章分类

全部博文(1293)

文章存档

2019年(1)

2018年(1)

2016年(118)

2015年(257)

2014年(128)

2013年(222)

2012年(229)

2011年(337)

分类: C/C++

2015-05-08 15:30:53


  1. #include<stdio.h>
  2. int main()
  3. {
  4.     int a=3;
  5.     int b=5;
  6.     printf(" a&b = %d\n",a&b);
  7.     getchar();
  8.     return 0;
  9. }


image

0000 0011

&

0000 0101

--------

0000 0001

高七位全部变0,低0位为1.

故与运算可以用来实现下面功能:

一、清0,将数与0做与;

二、取某个指定位的值:

典型应用:


  1. if((8-value)&0B100) // 取出8-value的第三位的数值
  2.     {
  3.         ioctl(fd, 1, 5);
  4.     }
  5.     else
  6.     {
  7.         ioctl(fd, 0, 5);
  8.     }
  9.     if((8-value)&0B010)
  10.     {
  11.         ioctl(fd, 1, 6);
  12.     }
  13.     else
  14.     {
  15.         ioctl(fd, 0, 6);
  16.     }
  17.     if((8-value)&0B001)
  18.     {
  19.         ioctl(fd, 1, 7);
  20.     }
  21.     else
  22.     {
  23.         ioctl(fd, 0, 7);
  24.     }


三、保留指定位

84(10) 0101 0100(2)

现要将数从左3、4、5、7、8的数取出来组成一个新数,将其与一个这些位为1其它位为0的数做与运算:

0101 0100(2)

&

0011 1011(2)

-----------

0001 0000(2)

 

得到一个十进制为16的数。

 

参考文献:

http://blog.sina.com.cn/s/blog_634296930100q08m.html

有空再研究或、取反等……。

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