位操作的细节

一、位操作符

(1)位与&

  • 位与符号是一个&,两个&&是逻辑与。
  • 位与时两个操作数是按照二进制位彼次对应位相与的,逻辑与是两个操作数作为整体来相与的。(举例:0xAA&0xF0=0xA0, 0xAA && 0xF0=1)

(2)位或|

  • 位或符号是一个|,两个||是逻辑或。
  • 位或时两个操作数是按照二进制位彼次对应位相与的,逻辑或是两个操作数作为整体来相或的。

(3)位取反~

  • C语言中位取反是~,C语言中的逻辑取反是!;
  • 按位取反是将操作数的二进制位逐个按位取反,而逻辑取反是真(在C语言中只要不是0的任何数都是真)变成假(在C语言中只有0表示假)、假变成真。

(4)位异或^

(5)左移位<<,右移位>>

  • C语言的移位要取决于数据类型。
  • 对于无符号数,左移时右侧补0(相当于逻辑移位),右移时左侧补0(相当于逻辑移位)。
  • 对于有符号数,左移时右侧补0(叫算术移位,相当于逻辑移位),右移时左侧补符号位(如果正数就补0,负数就补1,叫算术移位)。
  • 嵌入式中研究的移位,以及使用的移位都是无符号数。

二、位操作在操作寄存器时的特殊作用

1、寄存器操作的要求:特定位改变而不影响其他位

  • ARM是内存与IO统一编址的,ARM中有很多内部外设,SoC中CPU通过向这些内部外设的寄存器写入一些特定的值来操控这个内部外设,进而操控硬件动作。
  • 寄存器的特点是按位进行规划和使用,但是寄存器的读写却是整体32位一起进行的(也就是说你只想修改bit5~bit7是不行的,必须整体32bit全部写入)。
  • 寄存器操作要求是在设定特定位时不能影响其他位。
  • 读-改-写三部曲。当想改变一个寄存器中某些特定位时,先读出寄存器整体原来的值,然后修改特定位,再将修改后的值整体写入寄存器。。

2、特定位清零用&

3、特定位置1用|

4、特定位取反用^

  • (任何数,其实就是1或者0)与1位异或会取反,与0位异或无变化。
  • 要取反的特定位为1,其他位为0,然后将这个数与原来的数进行位异或即可。


三、使用位操作构建特定的二进制数

  • 如果要的这个数比较少位为1,大部分位为0,则可以通过连续很多个1左移n位得到。
  • 如果要的数是大部分位为1,则可以通过先构建其位反数,然后再位取反来得到。
  • 如果要的数中连续1(连续0)的部分不止1个,那么可以通过多段分别构造,然后再彼此位与即可。

四、使用用宏定义来完成位运算



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461101.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android支付接入(五):机锋网

前边已经陆续跟大家走了一遍运营商和支付宝付费接入&#xff0c;今天跟大家一起看看机锋网的支付接入。事实上付费接入本身并没有太多须要注意的地方&#xff0c;做的多了以后你会发现套路都是大同小异的。而须要注意的地方在于怎么跟游戏兼容及后期的维护&#xff0c;包含增减…

内存的使用

内容整理于朱有鹏老师的课程。 1、冯诺依曼结构和哈佛结构 冯诺依曼结构是数据和代码放在一起&#xff0c;哈佛结构是数据和代码分开存在。什么是代码&#xff1a;函数。什么是数据&#xff1a;全局变量、局部变量。在S5PV210中运行的linux系统上&#xff0c;运行应用程序时&am…

java启动密码,java - 用户验证密码后如何启动java applet程序? - SO中文参考 - www.soinside.com...

我正在尝试连接两个简单的java程序&#xff0c;一个密码登录程序&#xff0c;然后打开第二个程序(一个非常简单的PrintWriter程序)。我是一个大型菜鸟&#xff0c;所以尝试将二级程序添加到密码程序中。显然这没用。我看到很多关于创建密码程序的条目&#xff0c;以及一些关于使…

WPF 中的换行符

WPF中UI上和后台代码中的换行符不同。 其中&#xff1a; XAML中为 C#代码中为 \r\n 或者&#xff1a; Environment.NewLine转载于:https://www.cnblogs.com/eric_ibm/archive/2013/05/09/WPF.html

matlab教程蚁群算法,蚁群算法怎样用MATLAB仿真

蚁群算法采用matlab开发的仿真平台&#xff1a;算法实现&#xff0c;路径显示&#xff0c;人机交互控制等希望对你有帮助&#xff01;是可以运行的% the procedure of ant colony algorithm for VRP%% % % % % % % % % % %%initialize the pa…

androidpn的一次亲密接触(二)

简单看了一下源码的实现&#xff0c;这里贴一点个人觉得比叫重要的代码。 XmppManager.java 构造方法&#xff1a;Java代码public XmppManager(NotificationService notificationService) 在这里主要是从共享引用中取得xmpp服务器地址和端口号、用户名和密码。 内部类Java代码…

指针知识学习[总]

printf("p %p.\n", p); // %p打印指针和%x打印指针&#xff0c;打印出的值是一样的 printf("p 0x%x.\n", p); 一、指针是什么&#xff1f; 1、指针变量和普通变量的区别 指针的实质就是个变量&#xff0c;它跟普通变量没有任何本质区别。指针完整的名字…

网络游戏性能测试的几点想法

进入游戏行业也有一段时间了&#xff0c;在日常的工作中对游戏的性能测试也产生了一些想法&#xff0c;因此写出来与大家讨论讨论。网络游戏行业现在越做越大&#xff0c;面也越来越广了&#xff0c;依我的观点主要分为以下几个方面&#xff1a;1、传统的c/s架构的网络游戏&…

mongodb java报授权,mongoDB 3.0用户创建与授权

选择数据库 use admin添加用户&#xff1a;db.createUser({user: "admin",pwd: "12345678",roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]})此命令创建的用户只有管理用户的权限&#xff0c;并没有操作数据库的权限。查看…

交换排序-经典的快速排序算法总结

时间复杂度&#xff0c;平均O&#xff08;nlogn&#xff09;&#xff0c;最坏O&#xff08;n)&#xff1b; 不稳定的算法 1、算法思想 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略&#xff0c;通常称其为分治法(Divide-and-ConquerMethod)。…

c语言数组问题解析

#import <Foundation/Foundation.h>#define COUNT 10int main(int argc, const char * argv[]){//1、随机产生20个[10 , 50]的正整数存到数组中&#xff0c;并求数组中的所有元素最大值、最小值、平均值以及各元素之和。第二大值。// int max 0, min 0, sum 0, sec…

指针学习2

主要是指针数组、数组指针、函数指针的学习&#xff0c;以及二重指针、二维数组的学习。 一、指针数组与数组指针 1、概念 指针数组的实质是一个数组&#xff0c;这个数组中存储的内容全部是指针变量。数组指针的实质是一个指针&#xff0c;这个指针指向的是一个数组。2、分析…

php excel 分页,excel分页线怎么增加

增加excel分页线的方法&#xff1a;首先依次点击“工作簿视图-分页预览”&#xff1b;然后点击要在其下方插入分页符的这一行&#xff1b;最后在“页面布局”选项卡上的“页面设置”组中&#xff0c;单击“分隔符”即可。本文操作环境&#xff1a;Windows7系统&#xff0c;Micr…

C# 中的委托和事件

PDF 浏览&#xff1a;http://www.tracefact.net/Document/Delegates-and-Events-in-CSharp.pdf文中代码在VS2005下通过&#xff0c;由于VS2003(.Net Framework 1.1)不支持隐式的委托变量&#xff0c;所以如果在一个接受委托类型的位置直接赋予方法名&#xff0c;在VS2003下会报…

DEBUG、void、NULL、C库和API、临时匿名变量、main函数

一、程序调试的debug宏 1、程序调试的常见方案 单步调试、裸机LED调试、打印信息、log文件 利用调试器进行单步调试&#xff08;譬如IDE中&#xff0c;Jlink&#xff09;适用于新手&#xff0c;最大的好处就是直观&#xff0c;能够帮助找到问题。缺点是限制性大、速度慢。裸机…

php7 有ext skel吗,PHP扩展开发系列02 - 老司机起步之函数

上一篇扩展开发引导文章中。创建了编写扩展的三个基本文件。或许你会有个疑问PHP没有类似的自动生成项目框架的工具吗&#xff1f; 当然有。这篇文章就开始介绍使用 "php-ext-cli" 工具来生成扩展项目文件注意这里的 "php-ext-cli" 本身没有这玩意&#xf…

php 数据类型转换与比较

<?php define("PI", 3.1415926); echo PI."<br>"; //定义一个常量 define("GREETING","Hello world!");echo constant("GREETING")."<br>"; $a 10; $b "10a"; echo (string)$a $b; …

(转载)说说char

char一直都在使用并且大量的使用&#xff0c;但是&#xff0c;大部分都是在单一平台上&#xff0c;那样没有太多的问题&#xff0c;在windows上大量直接使用wchar_t来解决中文的问题。并且在使用跨平台时也大多直接使用了Qt的QString来节省了很多的麻烦&#xff0c;但是现在项目…

字符串类型、结构体、共用体、枚举、container宏、内存来源

一、C语言的字符串类型 1、C语言没有原生字符串类型 很多高级语言像java、C#等就有字符串类型&#xff0c;有个String来表示字符串&#xff0c;用法和int这些很像&#xff0c;可以String s1 "linux";来定义字符串类型的变量。C语言没有String类型&#xff0c;C语言…

WPF 正確理解ContentPresenter

2019独角兽企业重金招聘Python工程师标准>>> 我們先由下圖來看類層次,可知ContentControl繼承Control,ContentPresenter繼承FrameworkElement(Control也繼承FrameworkElement); 同樣的,ItemsControl繼承Control,ItemsPresenter繼承FrameworkElement. 在Control類並…