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

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

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

一、位

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

目录
相关文章
|
10月前
【408计算机组成原理】—原码的乘法运算(九)
【408计算机组成原理】—原码的乘法运算(九)
|
12月前
|
算法
【计算机组成原理】(四)原码补码的加减乘除
各种码的作用: 模运算的性质:
166 0
|
5月前
|
C语言
逻辑电路与逻辑运算笔记分享
【4月更文挑战第1天】逻辑电路与逻辑运算笔记分享
86 4
|
存储 算法 程序员
5.4 汇编语言:算数运算指令集
算术运算指令集是计算机中的一组基本操作,用于对数字执行常见的算术运算操作。这些指令都是计算机中非常基础的运算指令,可以用于实现所有常见的算术运算操作,并可以通过组合使用实现更加复杂的数学运算。在实际编程中,程序员可以根据具体需求选择合适的运算指令,实现程序中的算术运算操作。
217 0
|
存储 算法 编译器
5.8 汇编语言:汇编高效除法运算
通常情况下计算除法会使用`div/idiv`这两条指令,该指令分别用于计算无符号和有符号除法运算,但除法运算所需要耗费的时间非常多,大概需要比乘法运算多消耗10倍的CPU时钟,在Debug模式下,除法运算不会被优化,但Release模式下,除法运算指令会被特定的算法经过优化后转化为为乘法,这样就可以提高除法运算的效率。
103 0
|
计算机视觉
【OpenCV图像处理4】算术与位运算
【OpenCV图像处理4】算术与位运算
92 0
|
Java
用Java实现简单的四则运算的运算器
用Java实现简单的四则运算的运算器
138 0
|
存储
410计算机组成原理学习笔记——运算方法和运算电路(三)
410计算机组成原理学习笔记——运算方法和运算电路(三)
456 1
410计算机组成原理学习笔记——运算方法和运算电路(三)
|
存储
410计算机组成原理学习笔记——运算方法和运算电路(四)
410计算机组成原理学习笔记——运算方法和运算电路
178 1
410计算机组成原理学习笔记——运算方法和运算电路(四)
409计算机组成原理学习笔记——运算方法和运算电路(二)
409计算机组成原理学习笔记——运算方法和运算电路(二)
344 1
409计算机组成原理学习笔记——运算方法和运算电路(二)