码迷,mamicode.com
首页 > 编程语言 > 详细

嵌入式C语言之位运算 &..|.~.>>

时间:2015-05-13 21:39:14      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:

在嵌入式编程中,掌握位运算在操作寄存器的时候很方便,由于之前在上位运算的时候没上,但是由于位运算的难度不是很大,自己编写程序,顺便做些总结.

&   |   ~ 这三个位运算符号不难理解,但是要区别与逻辑运算符号&&  和||

1.需要总结的是:假如要使寄存器的值为1的话,一般用 这个寄存器的值来| 上1 比如要将i的值变为1则可以使用    i   |=  1;    意思就是将i的值与上1的值再给i。同理要让一个变量的值变成0的话,将使用 &上0     例如   i&=0;

2.但是一般寄存器都是用16进制来表示,假如要让寄存器的N位为1  只要将 1<<N位  再       |       这个数即可。假如要让寄存器的N位为0 只要将 1<<N位 ,,,取反 再  &  上这个数

 1 #include<stdio.h>
  2 
  3 int main()
  4 {
  5     unsigned i=0x4590ab34; //01000 0101 1001 0000 1010 1011 0011 0100
  6 
  7     int j= 0x37; // 0011 0111  
  8     int k= 0x42; // 0100 0010
  9     unsigned untj=0x37;  //0011 0111
 10 
 11     printf("j&k is %x\n",j&k);//0000 0010 02
 12     printf("j|k is %x\n",j|k);//0111 0111 77
 13     printf("~j %x\n",~j);// 
 14     printf("~untj %x\n",~untj);// 1100 1000  c8
 15 
 16     unsigned ret=0;
 17     //将i的第4位置1
 18     ret = i|(1 << 3);
 19     printf("i   is %x\n",i);
 20     printf("ret is %x\n",ret);
 21 
 22     //将i的第2位置0
 23     ret = i& ~(1 << 2);
 24     printf("i   is %x\n",i);
 25     printf("ret is %x\n",ret);
 26 
 27     //将i的第4---9置1
 28     ret = i|(0x3f << 4);//0011 1111 =3f
 29     printf("i   is %x\n",i);
 30     printf("ret is %x\n",ret);
 31 
 32     //将i的第4---9置0
 33     ret = i&~(0x3f << 4);//0011 1111 =3f
 34     printf("i   is %x\n",i);
 35     printf("ret is %x\n",ret);
 36 
 37     //将i的第4---7置1 且12-- 15置1
 38     ret = i|(0xf << 4 | 0xf << 12) ;// 1111 =f
 39     printf("i   is %x\n",i);
 40     printf("ret is %x\n",ret);
 41 
 42     //将i的第4---9置0 且13-- 15置0
 43     ret = i&~(0x3f << 4 | 0x7 << 13) ;// 00111111 3f  0111 =7
 44     printf("i   is %x\n",i);
 45     printf("ret is %x\n",ret);
 46 
 47 }
~     

 

 

即可。

下面是测试的代码

 

嵌入式C语言之位运算 &..|.~.>>

标签:

原文地址:http://www.cnblogs.com/hongzhunzhun/p/4501535.html

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