目录
·前言
计算机内部流动的信息分为:数据信息(计算机加工处理的对象),控制信息(用于控制数据信息的加工处理)。
一、数据表示的作用
·是将数据按照某种方式组织起来,以便计算机硬件能直接识别和使用
·设计和选择时需考虑的因素:数据的类型、表示的范围和精度、存储和处理的代价、软件的可移植性。
二、数值数据的表示
·有确定的大小,能在数轴上找到他们的位置。(而非数值数据一般为文字和符号,没有值的含义)
2.1机器码表示
·(二进制也有正负之分)真值:用+和-分别表示正和负。
·机器数/机器码:数值和符号(0正1负)一起编码表示二进制数。
·常用的定点数机器码有原码、反码、补码、移码等。
2.1.1原码
·符号化的数值;0正1负,数值位不变;有两个机器0,正00...0,负10...0;加减运算时符号位不能直接参与;目前在计算机中仅用于表示浮点数的尾码。
·计算方法:
·(正/负)整数和小数:数值位不变,前面添加符号位0正1负。<据定义>
2.1.2反码
·又称“1的补码”(当真值x为负数时,[x]反+|x|的值是全1的编码);符号位同原码的;有两个机器0,正00....0,负11...1;加减法时符号位可以直接参与运算(但是没采用,因为有更方便的--补码,减法可以用加法代替)。
·计算方法:
·首先看真值的正负,正数的反码和原码一样,负数的话(1)符号位同原码的(2)数值位要逐位取反。
2.1.3补码
·“模/模数”的概念:是一个数值计量系统的计量范围,记作mod或M。(--12小时制的时钟,最大刻度是12,12也就是它的模,超过就自动减去12/模数)模数和0是等价的
eg:16:00<=>4:00(+12:00)都表示下午4点
-8和+4(=12+(-8))也是等价的(mod12),也可以说-8和+4对模12是互补的,或者模为12时,-8是+4的补码。
--->可见,负数的补码是该负数加上模数。
·补码又称“模2的补码”;有一个多余的编码状态,在定点小数中表示-1,在定点整数中表示-2的n次方;只有一个0 00..0;符号位可以直接参与运算。
·由于计算机中的二进制数据都有字长的限制,数据最高位进位的位权值就是模数,运算结果超过模数的部分都会被自动舍弃。计算机二进制数据的运算属于典型的有模运算。
·计算方法:
(1)正数(整数和小数):补码等于其原码
(2)负数(整数和小数):
-真值加上模数
-反码法--适合硬件,1)符号位为1;2)数据位是真值按位取反,再末位+1
-扫描法--适合手算,1)符号位为1;2)数据位从右往左,右起第一个1及其右边的0保持不变,其余的按位取反
·知补码求真值:
看符号位,为0表示真值为正,则数值部分不变;为1表示真值为负,数值位采用反码法或者扫描法
·计算机中采用补码表示有符号的整数。(C语言中的char,short,int,long型整数)
·变形补码/双符号位补码:
00为正,11为负,其他同上
·表示溢出的检测很容易,运算时最高符号位(第一个)永远表示正确的符号位,01正溢出,10负溢出--适合手工运算,但计算机中常用的还是单符号溢出检测方案
2.1.4移码
·只用于定点整数的表示,通常还表示浮点数的阶码(偏移--便于浮点数的比较;简化浮点机器0的判断);编码方式就是直接将真值加一个常数偏移量(也是修正量)bias(2的n次方)--数轴上平移(保持了真值的大小顺序,可以直接比较大小);0是唯一的10...0;便于浮点运算的对阶操作。
·计算方法:
移码的符号位和补码的相反,数值位相同--正数移码的符号位是1,反之
2.1.5总结和补充
1)原码、反码、补码的符号位相同
2)补码最大负数为全1,其真值为-1,最小负数为1000..0
3)移码全0最小,全1最大
4)*计算机中没有小数点的表示,这里仅仅是为了说明小数点位置,最高位表示符号(来自其他博主,暂时忘记了出处,找到后会补充哒)
2.2定点数表示
·该表示法约定计算机中所有数据的小数点位置固定(无需存储)在数据的最高数位之前(符号位之后)--定点小数<在计算机中主要用于表示浮点数的尾数,没有高级语言数据类型与之对应>;若固定在最低数位之后--定点整数<在计算机中C语言的char,short,int,long型整数与之对应>。
2.2.1定点小数
x0.x1x2x3...xn,其中符号位:x0;数值(有效部分)位(尾数):x1x2....xn;最高有效位:x1。
2.2.2定点整数
x0x1x2...xn,表示的数据范围需考虑:
1)机器字长(字长越长范围就越大)
2)所采用的机器数表示方法(补码和移码比原码和反码多表示一个数)
2.2.3定点数表示范围
·n为机器字长,所表示的每个数都可以对应数轴上的刻度(均匀分布的),整数间隔1,小数间隔2的-n次方。
·数据超出计算机所能表示的数据范围称为溢出,数据大于最大正数是正上溢,反之。
·定点小数存在精度问题,所有不在数轴刻度上的纯小数都超出了定点小数所能表示的精度,无法表示--精度溢出,需以舍入方式近似表示。
2.3浮点数(小数点位置可浮动)表示
2.3.1表示形式--阶码和尾数
·任意二进制数N=2的E次方×M=2的±E次方×(±0.m)
·阶码E:定点整数;位数决定数据表示的范围(越多越大);其值决定了小数点的位置
·尾码M:定点小数;位数决定数据的精度(阶码长度同时越多越高)
·阶码可采用不同的机器码表示
·阶符e0 阶码e1..ek 数符m0 尾数m1..mn
2.3.2表示范围
·阶码正最小,尾数正最小--浮点数正数最小值(最小精度),反之。阶码最大值,尾数最小值--浮点数负数最小值,反之。
·受机器字长的限制-->存在溢出现象
·可表示的数据范围是正数区域、负数区域和0
·若运算结果发生上溢,浮点运算器件会显示溢出标志;若发生下溢,可作为机器0处理;
·阶码每变化一个刻度,数据就变大一倍(∴浮点数在数轴上分布不均匀)--浮点密度变化
2.3.3规格化
·是对尾数--算术左移或右移,并同步减少或增加阶码值-->左移/右移规格化方法
·使尾数真值最高有效位为1,即其绝对值大于或等于(0.1)2进制或(0..5)10进制;绝对值大于1小于2,eg:N=2的E次方×M=2的±e次方×(±1.m)
·隐藏位
2.4 IEEE754浮点数标准
·所有二进制由符号位S、阶码E和尾数M 三部分组成,不同精度的S\E\M位宽不同,偏移量也不同
·主要包括32位单精度浮点数和64位双精度浮点数,分别对应C语言的float和double型数据
2.4.1单精度浮点数
eg:32位的
S 1位,E 8位,M 23位
·阶码E采用移码表示移码,偏移量是127不是标准移码的123。偏移量越大,移码max和min都越小,非规格化数精度越高,规格化数表示范围越小。
·尾数M为定点小数,小数点固定在其最左侧,且小数点左边还有一位隐藏的1,∴实际有效位是24,完成尾数形式是1.M,进行浮点数表示时只保存M。尾数部分是绝对值表示,其符号位也是浮点数的符号位S,为1--表示负数,为0--表示正数。∴浮点数尾数可看作原码表示,
·与真值之间的转换流程
2.5十进制编码
2.5.1十进制整数
(1)BCD码:8421码(有权)、2421码(有权)、余3码(无权)--8421码+3(0011)
(2)BIC码:p31
(3)DPD码:p32
2.5.2十进制浮点数
p32
2.6计算机中的数据类型
·汇编语言中取决于指令操作符、高级语言中--C语言p35-p39
2.7非数值表示、校验、冗余等p40-p53
课后习题好好做做,多多练习才能掌握好