计算机系统的位运算与逻辑运算

一、位

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这部分内容的一个总结和理解,参考资料也是这本书,作为小白第一次写博客,希望各位指出不足,相互交流

计算机中逻辑运算顺序,【计算机系统】位运算与逻辑运算相关推荐

  1. 计算机中的进制位运算

    为什么计算机用二进制计数: 计算机是由电路构成的,电路只有0和1 两种状态. 不同进制间的换算: 在十进制中,个位的1代表10⁰=1,十位的1代表10¹=10,百位的1代表10²=100,所以:123 ...

  2. java 二进制位运算_Java中的二进制与位运算

    大家在阅读一些算法或者一些开源框架的时候,总会见到~,>>,>>>,|这种大量的位运算,因此想要读明白 这部分代码,对于计算机的二进制操作以及位运算是必须要了解的,那么本 ...

  3. 布尔运算,位运算,逻辑运算

    C语言支持按位布尔运算,也就是同样有与,或,取反,异或. 一个数,异或它本身=0.通过异或的这一特点,我们可以不需要第三个值就能将两个值调换."这种交换方式并没有性能上的优势,它仅仅是一个智 ...

  4. 4.位运算和逻辑运算(带例题)

    目录 1.位运算 2.逻辑运算 1.位运算 运算符 &(与,全是1为1,其余为0) |(或,全0为0,其余为1) ~(取反,把1取反变0,0取反变1) ^(异或) 1^1=0 0^0=0 1^ ...

  5. 单片机c语言位运算写法,单片机与嵌入式系统中C语言的位运算小记

    原标题:单片机与嵌入式系统中C语言的位运算小记 编了个PIC的项目,对里的还是蛮有感悟的,特此记录一下. 譬如说,在程序中定义了一个char类型的变量, purge_short_enable_flag ...

  6. 【CV 向】了解 OpenCV 中的算术与位运算

    文章目录 引言 1. 利用 NumPy 创建图像 2. 算术运算 2.1 加法与减法 2.2 乘法与除法 3. 位运算 3.1 与运算 3.2 或运算 3.3 异或运算 3.4 非运算 结论 引言 P ...

  7. Verilog按位运算和逻辑运算

    或运算符(|),与运算符(&)使用按位运算和逻辑运算的写法不同.以或运算符为例.按位或为(|),逻辑或为(||).特别注意,按位取反为(~),逻辑取反为(!) 上方为按位或,将ab两个向量进行 ...

  8. C语言中的位运算和逻辑运算

    位运算 C语言中的位运算包括与(&),或(|),亦或(^),非(~). 下面的代码包扩了这些基本运算,还有一个两个数的交换(不用第三个数). #include<stdio.h> # ...

  9. c语言中一些常用的逻辑运算,C语言中的位运算和逻辑运算

    这篇文章来自:http://blog.csdn.net/qp120291570/article/details/8708286 位运算 C语言中的位运算包括与(&),或(|),亦或(^),非( ...

最新文章

  1. synchronized(class)、synchronized(this)与synchronized(object)的区别分析
  2. 第四期 | 带学斯坦福CS224n自然语言处理课+带打全球Kaggle比赛(文末重金招募老师!)...
  3. 牛客网_PAT乙级_1027在霍格沃茨找零钱(20)
  4. python在函数内部访问外部全局变量的方法_在函数外部访问函数变量,而无需使用“全局”...
  5. Android之SharedPreferences(二)——跨程序调用
  6. 151. Reverse Words in a String
  7. Qt使用导出类报错:error C2491: “ZMapWidget::staticMetaObject”: 不允许 dllimport 静态数据成员 的定义
  8. 列表解析(list comprehension) 与三目运算符
  9. AS3.0中的显示编程(五)-- Loader(加载器)
  10. gin -get请求的小示例2-Handle处理post请求
  11. 2021-06-28DOM节点插入
  12. android京东流式布局,京东移动端首页流式布局
  13. OpenCV-直方图
  14. 无偏估计的数学证明和分析
  15. Java 11 发布线路图:有哪些值得期待的新特性?
  16. 阿里云服务器能抗ddos攻击吗
  17. 【Android】组件安全
  18. RS485学习(一)
  19. 第三十九期:1024特别版:向“程序媛们”致敬!
  20. 家里网络连不上outlook_家里OUTLOOK上不了如何处理--

热门文章

  1. 2021数博会现场直击丨工业互联网如何驱动产业数字化转型?
  2. MacBook Pro如何安装Windows 11(非虚拟机)
  3. top 命令使用教程
  4. 网红直播唱歌被诉索赔10万元
  5. span文字强制换行
  6. linux增加java内存,linux 使用文件增加虚拟内存 swap
  7. 支付宝还信用卡开始收费 互联网服务进入收费时代?
  8. 官方教程|免费领海外云主机(优质长期)
  9. 实习四 6-1 Two Stacks In One Array (20 分)
  10. vb围棋源码,直接拿走