【计算机系统】位运算与逻辑运算

简介: 【计算机系统】位运算与逻辑运算

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

一、位

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 a a=[ a ( w − 1 ) a_{(w-1)} a

(w−1)


, a ( w − 2 ) a_{(w-2)} a

(w−2)


,……, a 1 a_1 a

1


, a 0 a_0 a

0


], b b b=[ b ( w − 1 ) b_{(w-1)} b

(w−1)


, b ( w − 2 ) b_{(w-2)} b

(w−2)


,……, b 1 b_1 b

1


, b 0 b_0 b

0


],那么这两个位向量的逻辑与运算就是 a a a& b b b=[ 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_0 a

0


& b 0 b_0 b

0


],注意此时的二进制代数视为表示逻辑真假的布尔代数。

任何“整型”数据类型都可以使用位运算。对于十六进制表示的字节进行位运算时,最好的方法是将十六进制转二进制,位运算后再转回十六进制,例如对char类型数据进行位运算。

4、位向量的应用

(1)表示有限集合

用位向量 a a a=[ a ( w − 1 ) a_{(w-1)} a

(w−1)


, a ( w − 2 ) a_{(w-2)} a

(w−2)


,……, a 1 a_1 a

1


, a 0 a_0 a

0


]编码任何子集 A A A⊆{0,1,2……, w − 1 w-1 w−1},当且仅当 i i i⊆ A A A时 a i a_i a

i


 = 1,于是用与或非就可以分别进行有限集合的交并补集运算

(2)位向量掩码(BitMask)

通过位向量运算,有选择地使能或屏蔽某些信号(或权限等)的位向量,称为位向量掩码。

例如,给出 x x x=0x87654321,要求给出一个BitMask使其将除了 x x x的最低有效字节外其余位都取补,而最低有效字节不变。于是我们可以给出 a a a=~0xFF,然后将 x x x与 a a a异或运算即可实现目标。下面要总结几点:

①1^x 可以实现对x取反,0^x可以实现保持x不变

②上例位向量还可以是 a a a = 0xFFFFFF00,然后直接进行 x x x^ a a a,但这样的缺点是代码的可移植性较差

5、移位运算

image.png

注意:

①位向量最高位为0时,算术右移与逻辑右移等价,因为把最高位视为符号位的话,有符号的正数和无符号数等价

②循环移位:若对于一个w位位向量,进行k≥w的移位运算,则此时位移量为k mod w,类似于循环队列的索引结构。但这种行为没有保证,编程时应尽可能保证k<w

③移位的优先级较低,移位运算时要注意运算顺序

二、布尔代数

1、定义

将逻辑真定义为二进制数1,逻辑假定义为二进制数0,这种表示逻辑运算的二进制代数称为布尔代数。利用布尔代数可以很好地研究逻辑推理。

2、逻辑运算

image.png

3、位运算与逻辑运算的关系

可以看出位级逻辑运算是元素级的布尔逻辑运算,即每个位向量元素进行0-1逻辑运算;而命题逻辑运算是把整个字节看成一个整体,将所有的非0的参数看成逻辑真(1),0看成逻辑假(0),所以就命题本身而言可以不为布尔代数,执行逻辑运算时是把整体看成一个布尔代数,再进行相应的逻辑运算。

三、小结

本篇博客是对CSAPP这部分内容的一个总结和理解,参考资料也是这本书,作为小白第一次写博客,希望各位指出不足,相互交流

目录
相关文章
|
存储 算法 调度
分页储存管理.分段储存管理.虚拟储存管理
分页储存管理和分段储存管理是操作系统中常用的两种内存管理方式。 1. 分页储存管理: - 基本原理:将物理内存和逻辑内存划分为固定大小的页面和页面框,使得逻辑地址空间和物理地址空间可以对应起来。进程的逻辑地址空间被划分为多个固定大小的页面,每个页面与一个物理内存页面框对应。通过页表将逻辑地址映射到物理地址,实现地址转换。 - 优点:简单、灵活,能够提供较大的逻辑地址空间,适用于多道程序设计和虚拟内存管理。 - 缺点:存在内部碎片,会造成一定的存储空间浪费。 2. 分段储存管理: - 基本原理:将进程的逻辑地址空间划分为若干个逻辑段,每个逻辑段代表一个逻辑单位,如代码
580 0
|
存储 云计算
《云计算:原理与范式》一导读
云供应商、研究人员及相关的从业者正在努力确保对潜在的用户在云计算及利用云计算的全部潜力方面提供培训。
1838 0
《云计算:原理与范式》一导读
|
开发工具 git Python
python之 libnum库安装使用方法
python之 libnum库安装使用方法
931 0
|
存储 安全 算法
使用jotp实现双因子验证
扫盲使用totp增强身份安全性指南,原理看懂也不用自己造轮子呀,最讨厌哪些啥也不懂的搬运工,我这里给大家解惑吧
913 0
【wordpress教程】wordpress博客网站添加非法关键词拦截
有的网站经常被恶意搜索,站长们不胜其烦。那我们如何屏蔽恶意搜索关键词呢?下面就随小编一起来解决这个问题吧。
266 1
|
数据采集 运维 算法
大数据项目管理:从需求分析到成果交付的全流程指南
【4月更文挑战第9天】本文介绍了大数据项目从需求分析到成果交付的全过程,包括需求收集与梳理、可行性分析、项目规划、数据准备与处理、系统开发与集成,以及成果交付与运维。文中通过实例展示了如何进行数据源接入、数据仓库建设、系统设计、算法开发,同时强调了需求理解、知识转移、系统运维的重要性。此外,还提供了Python和SQL代码片段,以说明具体技术实现。在大数据项目管理中,需结合业务和技术,灵活运用这些方法,确保项目的成功执行和价值实现。
3245 1
|
JSON 分布式计算 监控
《数据版本迷宫揭秘》——Delta Lake如何玩转时间旅行,让你的数据不再迷失!
【8月更文挑战第27天】Delta Lake是一款为Apache Spark设计的高性能数据存储系统,提供ACID事务、可扩展的元数据管理和数据版本控制等功能。利用不可变的JSON格式事务日志,Delta Lake能追踪所有表变更,确保数据一致性和可追溯性。每项写操作都会生成新的事务日志文件,支持轻松回溯至任意版本。此外,Delta Lake还具备数据回溯、确保数据一致性及审计监控等优点,为大数据环境下的数据治理提供强大支持。
175 0
|
监控 安全 网络安全
Windows系统安全深度解析:挑战、策略与全面防护
对敏感数据进行加密是保护数据机密性的重要手段。使用强加密算法对敏感数据进行加密存储和传输,即使数据被窃取也无法被轻易解密。此外,还可以考虑使用全磁盘加密技术来保护整个系统的数据安全性。
|
前端开发 搜索推荐 安全
云LIS系统概述 医院云HIS系统源码 开箱即用
云LIS(云实验室信息管理系统)是一种结合了计算机网络化信息系统的技术,它无缝嵌入到云HIS(医院信息系统)中,用于连接各种检验分析仪器和管理现代化实验室流程。云LIS系统不仅提高了检验科的工作效率,降低了工作强度,而且缩短了病人等待化验报告的时间,减少了交叉污染的机会。此外,云LIS系统还集成了前处理、检验、报告、质控、统计分析等功能,支持个性化报告出具和服务端单独队列生成报告,能在几分钟内批量生成报告,从而提高了实验室的工作效率和质量。
318 3
|
搜索推荐 语音技术 开发工具
ModelScope问题之文档部署到阿里云EAS 调用模型报错如何解决
ModelScope模型报错是指在使用ModelScope平台进行模型训练或部署时遇到的错误和问题;本合集将收集ModelScope模型报错的常见情况和排查方法,帮助用户快速定位问题并采取有效措施。
637 1