计算机系统概论笔记-2-bit、数据类型及其运算

2.1 bit和数据类型

2.1.1 bit——信息的基本单位
只检测两点之间是否有电压而不测量精确电压值会大大减少电路的复杂度。
用“1”表示两点间存在电压,而“0”表示两点间不存在电压。
我们称这样一个非1即0的符号单位为一个“bit”。
为了表示更多的数值状态可以将多条线路合并时使用。
k个bit的组合可以表达2的k次方个不同状态,每个状态分别是k个0和1的bit序列组合。

2.1.2 数据类型
如果不仅定义了数值的表达方式,同时还定义了相关的操作方法,则在定义上称该表达方式为一种数据类型。
每个计算机指令集都定义了一组数据类型及其相应的操作指令。

2.2 整数数据类型

2.21 无符号整数
可以表示为一连串的二进制数字序列
6=00110=(0 x 2 x 2 x 2 x 2) + (0 x 2 x 2 x 2) + (1 x 2 x 2) + (1 x 2) + (0 x 1)
k个bit可以表示2的k次方个无符号整数(从0到2的k次方-1)

2.2.2 有符号整数
第一种思路:以最高bit代表符号,0为正数,1为负数,这种方法称为符号位表示法;
第二种思路:将一个正数的所有bit全部取反,这种方法称之为反码表示法;
这两种方法在硬件逻辑设计上都相当复杂,例如对符号相反的两个数相加,加法器不能对它们直接逐位相加,
因此需要更适合硬件操作的编码方案。最终答案是补码表示法。

2.3 补码
算术逻辑单元不知道也不关心它的两个输入数所代表的任何含义,只会将两个输入按位相加后输出。
这意味着必须选择一个合适的编码方式,以保证无论输入数是什么形式,它都将产生正确结果。
首先绝对值相同但符号相反的两个数和应该为0,补码表示法满足这个要求,且有另一个重要的特征是,
如果将数值-15到+15的各个码字顺序排开,相邻两个码字的差值正好为00001。
表示 value+1 的码字=表示 value 的码字+表示 1 的码字
补码运算中=进位bit始终是被忽略的。
如果已知一个非零的整数A的码字,将其取反加一就得到了 -A的补码
例:求-13的补码
1)13的补码为01101
2)反码为10010
3)加一后为10011即为-13的补码
01101
+ 10011
——————————
100000
忽略进位bit后和为00000
2.4 二进制数与十进制数之间的转换
2.4.1 二进制转换为十进制
2.4.2 十进制转换为二进制
2.5 bit运算之一:算术运算
2.5.1 加法和减法
加法:按位对齐,从右向左依次计算,慢二进一
减法:可以理解为加法,如A-B等价于A+(-B)
2.5.2 符号拓展
在二进制正数前面添加任意多的0不会改变其值;
在二进制负数前面添加任意多的1不会改变其值;
我们称这两种操作为“符号拓展”,主要应用于两个不同长度的二进制数相加的场合。

2.5.3 溢出
例如(+9)+(+11):
01001
+ 01011
——————————
10100
结果是一个负数(最高位或符号位为1),
出错是因为(+9)+(+11)的结果超过了5bit能表示的最大值0111(+15),导致进位冲入了符号位的bit。
这种故障现象就称为溢出。
只会发生在同符号运算之间,一个正数和一个负数相加永远不会溢出。

2.6 bit运算之二:逻辑运算
使用0和1这两个数来表示逻辑值中的假(flase)和真(true)。

2.6.1 “与运算”
二元逻辑运算,两个操作数都为1则结果为1,否则结果皆为0.
对两个长度为m-bit的二进制数做与运算,即将两个操作数按位对其,然后对其中的每一对bit做与运算。
例:
0011101001101001
AND 0101100100100001
——————————————————————
0001100000100001

“屏蔽字位”操作:“屏蔽字位”也是一个二进制数,可以理解为由两部分组成———即关心的位和想屏蔽的位。
关心的位为 1 想屏蔽的位为 0 ,然后用原来的二进制数和这个屏蔽字位与操作,
结果是想屏蔽的字位必然是0,关心的字位会保持原样。

2.6.2 “或”运算
二元逻辑运算,仅当两个操作数都为0时结果才为0,其他情况结果都为1。
也可以在两个m-bit的二进制数之间执行按位或运算。
例:
0011101001101001
OR 0101100100100001
——————————————————————
0111101101101001

2.6.3 “非”运算
一元逻辑运算符,即输出是输入的反操作。
例:
NOT 0011101001101001
——————————————————————
1100010110010110

2.6.4 “异或”运算
二元逻辑运算,如果两个输入值不同结果为1,相同结果为0
对两个m-bit二进制数进行按位异或运算
例:
0011101001101001
XOR 0101100100100001
——————————————————————
0110001101001000
可以用来判断两个二进制数是否相同,如果完全相同则结果必为0

2.7 其他类型
位矢量、浮点数、ASCII码、十六进制

2.7.1 位矢量
假设存在n个单位,可以用一个n位的二进制数代表这n个单元,
哪个单元空闲就将相应的bit清0,哪个单位忙碌时我们将相应的单元置1,我们称这个二进制数为“位矢量”

2.7.2 浮点数
LC-3中整数表示方法是16位补码,其中15位表示数值,最高的一位表示符号(正负)。
即-2的15次方到2的15次方减一,我们称LC-3的数值精度是15位,范围是2的15次方
浮点表示法中,除符号位之外,并不是将所有位都用于精度表示,
而是一部分bit用于表达数值范围,另一部分表达数据值精度。
例如大多数指令集都定义了的浮点类型 float :
符号:1位,代表正数或负数
数值范围:8bit,代表范围(指数部分)
数值精度:23bit,代表精度(尾数部分)

尾数部分是被正则化的,即小数点左边有且仅有一位非零数字,二进制下这个数字只可能是1,
省略掉这个必然存在的1,就可以用23bit表示24bit的精度。
指数部分的基数是2,8bit可以表示256个不同的指数值,但指数范围是1~254,
00000000和11111111有特殊的意思。

指数值在浮点数里的8bit表示为实际指数值的二进制加上127后的无符号整数。
例如:
	实际指数是+8则在浮点数里的8bit表示为10000111(即无符号整数135),因为135-8=127。
	实际指数是-125则在浮点数里的8bit表示为00000010(即无符号整数2),因为2-(-125)=127。

2.7.3 ASCII码
用于在计算机处理单元和输入输出设备之间传递字符的编码标准。
这种8bit编码方式被称为ASCII码。(American Standard Code for Information Interchange:美国信息交换标准代码)

2.7.4 十六进制计数法
0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F
主要好处是方便记忆和使用。

猜你喜欢

转载自blog.csdn.net/qdHbodHbp/article/details/91042953