本文主要是介绍位操作杂记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
有六个位操作符,他们是:
& 按位与
| 按位或
^ 按位异
~ 按位求反
>> 右移 ,这里需要注意的是数据整体的移动不是某一位的移动
<< 左移 , 这里需要注意的是数据整体的移动不是某一位的移动
例如:
1<<3 就是二进制数00001左移3位成为:01000
3<<3 就是二进制数00011左移3位成为:11000
自己的错误认识是只能对单个位进行移位,这样我们在对一个寄存器进行设置的时候可以使用下边的方法:
如何设置寄存器的位?
例如:
rADCCON = (0 << 0) | (0 << 1) | (0 << 2) | (ch << 3) | (1 << 6)| (1 << 14) ;
像这样,如果对某一位置1,就可以1<<第几位,然后与该寄存器相与就可以了,置0也是。
在这个操作的前提是该寄存器初始化的值为0,如果不是0,那么要置0的位相与之后未必是0,
所以可以在前边加如下:
rADCCON=(rADCCON & 0x00) |(0 << 0) | (0 << 1) | (0 << 2) | (ch << 3) | (1 << 6)| (1 << 14) ;
如果我们只需要对某一些对进行操作,而其他为不需要修改。可以借鉴上边的操作:
rADCCON=(rADCCON & 0x【mask】) |(0 << 0) | (0 << 1) | (0 << 2) | (ch << 3) | (1 << 6)| (1 << 14) ;
通过0x【mask】与寄存器相与,把需要修改的位清零,然后在相与,就可以在保护不需要修改位的前提下,修改需要修改的位。
| 按位或
^ 按位异
~ 按位求反
>> 右移 ,这里需要注意的是数据整体的移动不是某一位的移动
<< 左移 , 这里需要注意的是数据整体的移动不是某一位的移动
例如:
1<<3 就是二进制数00001左移3位成为:01000
3<<3 就是二进制数00011左移3位成为:11000
自己的错误认识是只能对单个位进行移位,这样我们在对一个寄存器进行设置的时候可以使用下边的方法:
如何设置寄存器的位?
例如:
rADCCON = (0 << 0) | (0 << 1) | (0 << 2) | (ch << 3) | (1 << 6)| (1 << 14) ;
像这样,如果对某一位置1,就可以1<<第几位,然后与该寄存器相与就可以了,置0也是。
在这个操作的前提是该寄存器初始化的值为0,如果不是0,那么要置0的位相与之后未必是0,
所以可以在前边加如下:
rADCCON=(rADCCON & 0x00) |(0 << 0) | (0 << 1) | (0 << 2) | (ch << 3) | (1 << 6)| (1 << 14) ;
如果我们只需要对某一些对进行操作,而其他为不需要修改。可以借鉴上边的操作:
rADCCON=(rADCCON & 0x【mask】) |(0 << 0) | (0 << 1) | (0 << 2) | (ch << 3) | (1 << 6)| (1 << 14) ;
通过0x【mask】与寄存器相与,把需要修改的位清零,然后在相与,就可以在保护不需要修改位的前提下,修改需要修改的位。
下边的方法是如果对寄存器位清零与位置1
#define setbit(x,y) x|=(1<<y) //将X的第Y位置1
#define clrbit(x,y) x&=~(1<<y) //将X的第Y位清0
这样我们这么写:
rADCCON&=~( (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 6)| (1 << 14) ) ;
#define setbit(x,y) x|=(1<<y) //将X的第Y位置1
#define clrbit(x,y) x&=~(1<<y) //将X的第Y位清0
这样我们这么写:
rADCCON&=~( (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 6)| (1 << 14) ) ;
另外一个技巧:
mask=0x01;
mask=0x01;
int i=0;
for(i=0;i<8;i++)
{
if( (arg&mask)!=0 )
{
GPFCON&=~(3<<i*2);
GPFUP=0x0;
gpio_mask&=( ~(1<<i) );
}
mask=(mask<<1);
}
mask=0x01;
for(i=0;i<8;i++)
{
if( (arg&mask)!=0 )
{
GPFCON&=~(3<<i*2);
GPFUP=0x0;
gpio_mask&=( ~(1<<i) );
}
mask=(mask<<1);
}
mask=0x01;
相关热门文章
- 网站设计:复杂产品的响应式设...
- 视频开发的岗位
- 慢性湿疹 色子
- 体癣 体癣的特征
- 牌九透视眼镜 扑克
- linux 常见服务端口
- 什么是shell
- linux socket的bug??
- linux的线程是否受到了保护?...
- 一个适用于windows和linux的抓...
- debian7系统与ATI X2300显卡...
- ubuntu sysklogd之配置文件介...
- 自己用的ubuntu环境搭建(一)...
- linux 学习心得
- 用户输入操作和数据的显示...
给主人留下些什么吧!~~
chinaunix网友2009-06-08 11:07:47
好服月租型IT服务台,与你共成长! 月租型ITSM软件,注册即可免费体验! 详情请登录官方网站:http://www.servicezon.com
回复 | 举报
评论热议
这篇关于位操作杂记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!