位操作杂记

2024-06-01 09:58
文章标签 杂记 位操作

本文主要是介绍位操作杂记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

有六个位操作符,他们是:
& 按位与
|   按位或
^  按位异
~  按位求反
>>  右移 ,这里需要注意的是数据整体的移动不是某一位的移动
<<  左移 ,  这里需要注意的是数据整体的移动不是某一位的移动
例如:
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)  ) ; 
另外一个技巧:
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;
<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
阅读(608) | 评论(1) | 转发(0) |
0

上一篇:GPIO驱动--简单字符型设备驱动

下一篇:关于内核版本匹配问题

相关热门文章
  • 网站设计:复杂产品的响应式设...
  • 视频开发的岗位
  • 慢性湿疹 色子
  • 体癣 体癣的特征
  • 牌九透视眼镜 扑克
  • 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

回复 | 举报
评论热议

这篇关于位操作杂记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1020689

相关文章

生活杂记1

生命中,总有一些事需要你一生去治愈,我把这些杂记写出来,写完了就不再想了,太内耗了…hahaha~ 因为嘴馋,小时候经常去老姑家,她家有各类零食及平时很少吃的“山珍海味”。去的次数多了,就和她家附近的邻居小孩也混的熟络了。再后来上了高中去的就少了,当年七中统招线521自费线491。我刚好压自费线,举全家之力花了15000读了七中,也没争气,后面高考也一塌糊涂。高二那会,一次去老姑家做客,经

【杂记】裂脑人实验和语言模型幻觉

【杂记】裂脑人实验和语言模型幻觉 模型的自主意识在哪里,人的自我认知在哪里?自然而然的,“裂脑人” 这个词突然出现在我脑海里。然后随意翻了翻相关的文章,觉得这个问题和目前大模型面临的幻觉问题也高度相关,遂随笔记录。 裂脑人 什么是裂脑人?人的大脑左右半脑本来是一个整体,因为先天或者后天的原因让左右半脑分开不产生连接,就是“裂脑”。过去这个方法被作为控制恶性癫痫的治疗手段。 一些铺垫知识

位操作(Bitwise Operation)

位操作(Bitwise Operation)是一种直接对整数的二进制位进行操作的计算方法。在计算机中,数据通常以二进制形式存储,位操作允许我们直接操作这些二进制位。位操作通常比常规的算术运算更高效,因为它们直接作用于二进制位而不涉及更复杂的计算。 常见的位操作符 1.按位与(&): 对应位都为1时,结果为1,否则为0。 例如:1010 & 1100 = 1000 2.按位或(|): 只要对应

关于位结构体及位操作总结

#include <stdio.h>#pragma pack(1)struct stu{char a:4; // a占用char的低4位 char b:4; // b占用char的高4位(注意,这里实际上是与a共享同一个char的空间) };#pragma pack(4)int main(){struct stu s={.a=2, //a:0010.b=3, //b:00

使用位操作高效解决单个元素出现问题【位运算】

使用位操作高效解决单个元素出现问题 在日常的算法面试和编程挑战中,常常会遇到寻找单个出现元素的问题。尽管可以用哈希表(map)轻松解决,但要求更高效的线性时间复杂度和常量空间复杂度时,位操作特别是异或(XOR)运算提供了一个巧妙的解决方案。本篇博客将深入探讨这个问题,详细解释异或运算的特性,并展示其在解决该类问题中的强大作用。 问题描述: 给定一个非空整数数组,除了某个元素只出现一次以外,其

AWTK fscript 中的位操作扩展函数

fscript 是 AWTK 内置的脚本引擎,开发者可以在 UI XML 文件中直接嵌入 fscript 脚本,提高开发效率。本文介绍一下 fscript 中的 位操作扩展函数 位操作扩展函数 1. & 位与运算。 原型 n1 & n2 示例 print(1 & 1) 2. | 位或运算。 原型 n1 | n2 示例 print(|(1, 2))

《C语言杂记》C语言预处理

预处理:对一些预处理命令进行执行的过程 预处理命令:头文件包含;宏定义等,用#开头的一些命令。 在C语言中预处理命令不会直接被编译,而是在编译这些预处理命令时,将这些预处理命令进行解析,然后将预处理结果替换成真正的C语言能编译的C语句。 在编译之前,预处理命令define会自动将程序中所有的Pi替换成3.14.在编译时程序中是不会在存在预处理命令的。 一)宏定义 1)不带参数的宏定义 如:

《C语言杂记》C语言常见错误

对于刚学编程,刚接触C++的新手来说,编译运行报错是最头疼的一件事,爆出一堆英文,英语差一点的又不知道什么意思,所以也不知道如何去改,在此,我给大家传一份常见错误中英文对照表及简单解释,希望可以帮到大家: fatal error C1003: error count exceeds number; stopping compilation 中文对照:(编译错误)错误太多,停止编译 分析:修改之前的

《C语言杂记》从getmemery()函数看内存管理、函数传参等一系列问题

在C 面试题目中,会经常出现getmemery()函数的改错题,比如下面这道题, 例一:代码如下: #include <stdio.h> char *getmemery() { char p[] = "hello world!"; return p; } void main() { char *str = NULL; str = getmemery(); print

《Linux杂记》Linux系统安装搜狗输入法

在Windows平台和手机平台上大家对搜狗输入法用的比较多,其实搜狗输入法也对Ubuntu有软件包的,搜狗输入法是基于AMD体系架构的,在基于AMD的体系架构都是支持搜狗输入法,对于ARM体系架构搜狗输入法是不支持的,但是可以安装谷歌,请看笔者的其他文章。笔者在这里要讲的是搜狗输入法的安装,接下来笔者就带领大家安装搜狗输入法。 首先给出Linux版本搜狗输入法的下载链接: https://pin