计算机中逻辑运算顺序,【计算机系统】位运算与逻辑运算
计算机系统的位运算与逻辑运算
一、位
1、定义
二进制数字系统中数据存储的最小单位,即每个二进制数0或1就称为位。位也叫比特(bit),8个bit组成一个字节(byte),每个字节表示程序中的某些文本字符。字长(word size)表征了CPU一次能并行处理的最多二进制位数,例如32位机一次最多能处理32个bit组成的单元。
2、表示方法
位的本质是二进制数。由于一个byte由8位构成,即00000000( 2 ) _{(2)}(2) ~ 11111111( 2 ) _{(2)}(2),这种表示方法很冗长。把8位二进制数转成十进制为0( 10 ) _{(10)}(10) ~ 255( 10 ) _{(10)}(10),虽然表示起来方便,但是二-十进制转换很麻烦。因此引入了十六进制表示法,原因在于十六进制表示8位二进制数很简洁而且二-十六进制可以快速转换。以0x或0X打头的数字常量一般就是十六进制数。
3、位向量
固定长度为w的由二进制代数组成的行向量称为位向量。位向量的逻辑运算是元素级的逻辑运算,例如a aa=[a ( w − 1 ) a_{(w-1)}a(w−1),a ( w − 2 ) a_{(w-2)}a(w−2),……,a 1 a_1a1,a 0 a_0a0],b bb=[b ( w − 1 ) b_{(w-1)}b(w−1),b ( w − 2 ) b_{(w-2)}b(w−2),……,b 1 b_1b1,b 0 b_0b0],那么这两个位向量的逻辑与运算就是a aa&b bb=[a ( w − 1 ) a_{(w-1)}a(w−1)&b ( w − 1 ) b_{(w-1)}b(w−1),a ( w − 2 ) a_{(w-2)}a(w−2)&b ( w − 2 ) b_{(w-2)}b(w−2),……,a 0 a_0a0&b 0 b_0b0],注意此时的二进制代数视为表示逻辑真假的布尔代数。
任何“整型”数据类型都可以使用位运算。对于十六进制表示的字节进行位运算时,最好的方法是将十六进制转二进制,位运算后再转回十六进制,例如对char类型数据进行位运算。
4、位向量的应用
(1)表示有限集合
用位向量a aa=[a ( w − 1 ) a_{(w-1)}a(w−1),a ( w − 2 ) a_{(w-2)}a(w−2),……,a 1 a_1a1,a 0 a_0a0]编码任何子集A AA⊆{0,1,2……,w − 1 w-1w−1},当且仅当i ii⊆A AA时a i a_iai = 1,于是用与或非就可以分别进行有限集合的交并补集运算
(2)位向量掩码(BitMask)
通过位向量运算,有选择地使能或屏蔽某些信号(或权限等)的位向量,称为位向量掩码。
例如,给出x xx=0x87654321,要求给出一个BitMask使其将除了x xx的最低有效字节外其余位都取补,而最低有效字节不变。于是我们可以给出a aa=~0xFF,然后将x xx与a aa异或运算即可实现目标。下面要总结几点:
①1^x 可以实现对x取反,0^x可以实现保持x不变
②上例位向量还可以是a aa = 0xFFFFFF00,然后直接进行x xx^a aa,但这样的缺点是代码的可移植性较差
5、移位运算
注意:
①位向量最高位为0时,算术右移与逻辑右移等价,因为把最高位视为符号位的话,有符号的正数和无符号数等价
②循环移位:若对于一个w位位向量,进行k≥w的移位运算,则此时位移量为k mod w,类似于循环队列的索引结构。但这种行为没有保证,编程时应尽可能保证k<w
③移位的优先级较低,移位运算时要注意运算顺序
二、布尔代数
1、定义
将逻辑真定义为二进制数1,逻辑假定义为二进制数0,这种表示逻辑运算的二进制代数称为布尔代数。利用布尔代数可以很好地研究逻辑推理。
2、逻辑运算
3、位运算与逻辑运算的关系
可以看出位级逻辑运算是元素级的布尔逻辑运算,即每个位向量元素进行0-1逻辑运算;而命题逻辑运算是把整个字节看成一个整体,将所有的非0的参数看成逻辑真(1),0看成逻辑假(0),所以就命题本身而言可以不为布尔代数,执行逻辑运算时是把整体看成一个布尔代数,再进行相应的逻辑运算。
三、小结
本篇博客是对CSAPP这部分内容的一个总结和理解,参考资料也是这本书,作为小白第一次写博客,希望各位指出不足,相互交流
计算机中逻辑运算顺序,【计算机系统】位运算与逻辑运算相关推荐
- 计算机中的进制位运算
为什么计算机用二进制计数: 计算机是由电路构成的,电路只有0和1 两种状态. 不同进制间的换算: 在十进制中,个位的1代表10⁰=1,十位的1代表10¹=10,百位的1代表10²=100,所以:123 ...
- java 二进制位运算_Java中的二进制与位运算
大家在阅读一些算法或者一些开源框架的时候,总会见到~,>>,>>>,|这种大量的位运算,因此想要读明白 这部分代码,对于计算机的二进制操作以及位运算是必须要了解的,那么本 ...
- 布尔运算,位运算,逻辑运算
C语言支持按位布尔运算,也就是同样有与,或,取反,异或. 一个数,异或它本身=0.通过异或的这一特点,我们可以不需要第三个值就能将两个值调换."这种交换方式并没有性能上的优势,它仅仅是一个智 ...
- 4.位运算和逻辑运算(带例题)
目录 1.位运算 2.逻辑运算 1.位运算 运算符 &(与,全是1为1,其余为0) |(或,全0为0,其余为1) ~(取反,把1取反变0,0取反变1) ^(异或) 1^1=0 0^0=0 1^ ...
- 单片机c语言位运算写法,单片机与嵌入式系统中C语言的位运算小记
原标题:单片机与嵌入式系统中C语言的位运算小记 编了个PIC的项目,对里的还是蛮有感悟的,特此记录一下. 譬如说,在程序中定义了一个char类型的变量, purge_short_enable_flag ...
- 【CV 向】了解 OpenCV 中的算术与位运算
文章目录 引言 1. 利用 NumPy 创建图像 2. 算术运算 2.1 加法与减法 2.2 乘法与除法 3. 位运算 3.1 与运算 3.2 或运算 3.3 异或运算 3.4 非运算 结论 引言 P ...
- Verilog按位运算和逻辑运算
或运算符(|),与运算符(&)使用按位运算和逻辑运算的写法不同.以或运算符为例.按位或为(|),逻辑或为(||).特别注意,按位取反为(~),逻辑取反为(!) 上方为按位或,将ab两个向量进行 ...
- C语言中的位运算和逻辑运算
位运算 C语言中的位运算包括与(&),或(|),亦或(^),非(~). 下面的代码包扩了这些基本运算,还有一个两个数的交换(不用第三个数). #include<stdio.h> # ...
- c语言中一些常用的逻辑运算,C语言中的位运算和逻辑运算
这篇文章来自:http://blog.csdn.net/qp120291570/article/details/8708286 位运算 C语言中的位运算包括与(&),或(|),亦或(^),非( ...
最新文章
- synchronized(class)、synchronized(this)与synchronized(object)的区别分析
- 第四期 | 带学斯坦福CS224n自然语言处理课+带打全球Kaggle比赛(文末重金招募老师!)...
- 牛客网_PAT乙级_1027在霍格沃茨找零钱(20)
- python在函数内部访问外部全局变量的方法_在函数外部访问函数变量,而无需使用“全局”...
- Android之SharedPreferences(二)——跨程序调用
- 151. Reverse Words in a String
- Qt使用导出类报错:error C2491: “ZMapWidget::staticMetaObject”: 不允许 dllimport 静态数据成员 的定义
- 列表解析(list comprehension) 与三目运算符
- AS3.0中的显示编程(五)-- Loader(加载器)
- gin -get请求的小示例2-Handle处理post请求
- 2021-06-28DOM节点插入
- android京东流式布局,京东移动端首页流式布局
- OpenCV-直方图
- 无偏估计的数学证明和分析
- Java 11 发布线路图:有哪些值得期待的新特性?
- 阿里云服务器能抗ddos攻击吗
- 【Android】组件安全
- RS485学习(一)
- 第三十九期:1024特别版:向“程序媛们”致敬!
- 家里网络连不上outlook_家里OUTLOOK上不了如何处理--