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

位运算中的小套路

时间:2015-04-16 01:10:10      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:

1 按位与&(0与任意数结果为0,1与任意数不变)

1.1  让某一些位变为0:

  x & 0xfe,让最后以为变为0,其他位不变。

1.2  取出某些位:

  x & 0xff,取出最后8位。

2按位或|(0或任意数不变,1或任意数结果为1)

2.1 让某些位变为1

  x | 0x01,让最后一位变为1。

2.2让两个数连在一起

  0x00ff | 0xff00,结果为0xffff。

3异或^

x ^ y ^ y结果为x

4左移

低位补0,移1位,相当于乘2

x <<n等价与 x /*=2^n

5右移

无符号数,高位补0,有符号数,高位补符号。

x >>n等价与 x / =2^n

6非~

~x表示对x的每一位取反。


 

输出一个整数的二进制形式

技术分享
 1 void prtBin(unsigned int number)
 2 {
 3     unsigned int mask = 1u<<31;//1u表示1是unsigned int型
 4     for( ; mask ; mask>>=1) 
 5     {
 6         printf("%d", number&mask?1:0);
 7     }
 8     printf("\n");
 9 
10 }
11 /*mask是一个只有1位为1的数字,1从最左端移动到最右端,将number与mask做按位与,由此可以知道number的每一位是否为1*/
输出整数的二进制表示

 

MCU中的SFR(特殊功能寄存器)利用位操作

技术分享

技术分享
1 /*问题:通过改变U0LCR来实现各个功能的开关*/
2 const unsigned int SBS=1u<<2;//SBS在第二位
3 const unsigned int PE=1u<<3;//PE在第三位
4 U0LCR |=SBS |PE;//通过和1做或运算,使得U0LCR的二、三位为1,其他位不变
5 U0LCR &=~SBS;//通过和0做与运算,使得U0LCR的二位变为0,其他位不变
6 U0LCR &=~PE;//通过和0做与运算,使得U0LCR的三位变为0,其他位不变
7 U0LCR &=~(SBS | PE);//通过和0做与运算,使得U0LCR的二、三位变为0,其他位不变
位操作用作硬件操作中的控制字

 


位段操作

某些功能控制可能是由几位一起实现的

技术分享
 1 #include<stdio.h>
 2 
 3 void prtBin(unsigned int number);
 4 struct U0{
 5     unsigned int leading:3;
 6     unsigned int FLAG1:1;
 7     unsigned int FLAG2:1;
 8     int tailing:27;
 9 };
10 int main(int argc,char const *argv[])
11 {
12     struct U0 uu;
13     uu.leading=2;
14     uu.FLAG1=0;
15     uu.FLAG2=1;
16     //uu.tailing=0xff00ff;
17     uu.tailing=0;
18     printf("sizeof(uu)=%d\n",sizeof(uu));
19     prtBin(*(int*)&uu);
20     
21     return 0;
22 }
23 
24 void prtBin(unsigned int number)
25 {
26     unsigned int mask = 1u<<31;//1u表示1是unsigned int型
27     for( ; mask ; mask>>=1) 
28     {
29         printf("%d", number&mask?1:0);
30     }
31     printf("\n");
32 
33 }
34 
35 //巧妙的用一个结构体来表示多个控制位段,可以用位段的成员名称来访问
36 //当结构体内所需的位数超过一个int时,会扩充为多个int
位段操作

 

位运算中的小套路

标签:

原文地址:http://www.cnblogs.com/tbhdwx/p/4430642.html

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