您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 第2章数据的机器级表示.
Ch2:DataRepresentation数据的机器级表示第一讲数值数据的表示第二讲非数值数据表示及数据的宽度、存储排列、纠/检错2019/12/202第一讲:数值数据的表示主要内容定点数的表示•进位计数制•定点数的二进制编码-原码、补码、移码表示•定点整数的表示-无符号整数、带符号整数浮点数格式和表示范围浮点数的规格化IEEE754浮点数标准•单精度浮点数、双精度浮点数•特殊数的表示形式C语言程序中的整数类型、浮点数类型十进制数表示2019/12/203信息的二进制编码计算机的外部信息与内部机器级数据机器级数据分两大类:•数值数据:无符号整数、带符号整数、浮点数(实数)、十进制数•非数值数据:逻辑数(包括位串)、西文字符和汉字计算机内部所有信息都用二进制(即:0和1)进行编码用二进制编码的原因:•制造二个稳定态的物理器件容易•二进制编码、计数、运算规则简单•正好与逻辑命题对应,便于逻辑运算,并可方便地用逻辑电路实现算术运算真值和机器数•机器数:用0和1编码的计算机内部的0/1序列•真值:机器数真正的值,即:现实中带正负号的数首先考虑数值数据的表示C语言中哪些类型是数值数据?哪些是非…?无符号整数有符号整数高级语言程序员角度图、树、链表等结构化数据描述文字、图、表、声音、视频等各种媒体信息输出设备用户角度输入设备低级语言程序员和系统设计者角度二进制编码表示的各种数据指令系统能识别的基本类型数据数值型数据非数值型数据整数(定点数)实数(浮点数)二进制数二进制编码的十进制数逻辑数据西文字符和汉字BACKP.26图2.12019/12/205数值数据的表示数值数据表示的三要素•进位计数制•定、浮点表示•如何用二进制编码即:要确定一个数值数据的值必须先确定这三个要素。例如,机器数01011001的值是多少?进位计数制•十进制、二进制、十六进制、八进制数及其相互转换定/浮点表示(解决小数点问题)•定点整数、定点小数•浮点数(可用一个定点小数和一个定点整数来表示)定点数的编码(解决正负号问题)•原码、补码、反码、移码(反码很少用)答案是:不知道!2019/12/206SignandMagnitude(原码的表示)BinaryDecimal0123456700000001001000110100010101100111容易理解,但是:0的表示不唯一,故不利于程序员编程加、减运算方式不统一需额外对符号位进行处理,故不利于硬件设计特别当ab时,实现a-b比较困难从50年代开始,整数都采用补码来表示但浮点数的尾数用原码定点小数表示BinaryDecimal-0-1-2-3-4-5-6-7100010011010101111001101111011112019/12/207补码特性-模运算(modular运算)时钟是一种模12系统假定钟表时针指向10点,要将它拨向6点,则有两种拨法:①倒拨4格:10-4=6②顺拨8格:10+8=18≡6(mod12)模12系统中:10-4≡10+8(mod12)-4≡8(mod12)则,称8是-4对模12的补码(即:-4的模12补码等于8)。同样有-3≡9(mod12)-5≡7(mod12)等结论2:对于某一确定的模,某数减去小于模的另一数,总可以用该数加上另一数负数的补码来代替。补码(modular运算):+和–的统一重要概念:在一个模运算系统中,一个数与它除以“模”后的余数等价。结论1:一个负数的补码等于模减该负数的绝对值。2019/12/208模运算系统举例例1:“钟表”模运算系统假定时针只能顺拨,从10点倒拨4格后是几点?10-4=10+(12-4)=10+8=6(mod12)例2:“4位十进制数”模运算系统假定算盘只有四档,且只能做加法,则在算盘上计算9828-1928等于多少?9828-1928=9828+(104-1928)=9828+8072=17900=7900(mod104)取模即只留余数,高位“1”被丢弃!相当于只有低4位留在算盘上。2019/12/209运算器是一个模运算系统,适合用补码表示和运算0000000110000010010011101111011101011010101111001101001101101001计算机中运算器只有有限位。假定为n位,则运算结果只能保留低n位,故可看成是个只有n档的二进制算盘。所以,其模为2n。当n=4时,共有16个机器数:0000~1111,可看成是模为24的钟表系统。真值的范围为-8~+7补码的定义假定补码有n位,则:定点整数:[X]补=2n+X(-2n-1≤X<2n-1,mod2n)定点小数:[X]补=2+X(-1≤X<1,mod2)注:实际上在计算机中并不使用定点小数表示!不需要掌握这个知识点。2019/12/2010求特殊数的补码②[-1]补=2n-0…01=11…1(n个1)(mod2n)假定机器数有n位①[-2n-1]补=2n-2n-1=10…0(n-1个0)(mod2n)③[-1.0]补=2-1.0=1.00…0(n-1个0)(mod2)④[+0]补=[-0]补=00…0(n个0)注:计算机中并不会出现-1.0的补码,这里只是想说明同一个真值在机器中可能有不同的机器数!2019/12/2011补码与真值之间的简便转换例:设机器数有8位,求123和-123的补码表示。解:123=127-4=01111111B-100B=01111011B[01111011]补=28+01111011=100000000+01111011=01111011(mod28),即7BH。-123=-01111011B[-01111011]补=28–01111011=100000000-01111011=11111111–01111011+1=10000100+1=10000101,即85H。如何快速得到123的二进制表示?各位取反,末位加12019/12/2012Two’sComplement(补码的表示)正数:符号位(signbit)为0,数值部分不变负数:符号位为1,数值部分“各位取反,末位加1”+0和-0表示唯一变形(模4)补码:双符号,用于存放可溢出的中间结果。值太大,用4位补码无法表示,故“溢出”!但用变形补码可保留符号位和最高数值位。BitwiseInverse111111101101110010111010100110000111Decimal012345678补码000000010010001101000101011001111000Decimal-0-1-2-3-4-5-6-7-8补码000011111110110111001011101010011000变形补码000000000100010000110010000101001100011101000变形补码0000011111111101110111100110111101011001110002019/12/2013如何求补码的真值根据补码各位上的“权”,可以求出一个补码的值真值范围:令:[A]补=an-1an-2……a1a0则:A=-an-1.2n-1+an-2.2n-2+……a1.21+a0.20符号为0,则为正数,数值部分同符号为1,则为负数,数值各位取反,末位加1例如:补码“11010110”的真值为:-0101010=-(32+8+2)=-422019/12/2014Excess(biased)notion-移码表示°什么是“excess(biased)notation-移码表示”?将每一个数值加上一个偏置常数(Excess/bias)°一般来说,当编码位数为n时,bias取2n-1Ex.n=4:Ebiased=E+23(bias=23=1000B)-8(+8)~0000B-7(+8)~0001B…0(+8)~1000B…+7(+8)~1111B°为什么要用移码来表示指数(阶码)?便于浮点数加减运算时的对阶操作(比较大小)例:1.01x2-1+1.11x23简化比较补码:111011?(-1)(3)1.01x2-1+4+1.11x23+4移码:011111(3)(7)移码主要用来表示浮点数阶码!0的移码表示唯一移码和补码仅第一位不同2019/12/2015Unsignedinteger(无符号整数)机器中字的位排列顺序有两种方式:(例:32位字:0…010112)•高到低位从左到右:00000000000000000000000000001011•高到低位从右到左:11010000000000000000000000000000•Leftmost和rightmost这两个词有歧义,故用LSB(LeastSignificantBit)来表示最低有效位,用MSB来表示最高有效位•高位到低位多采用从左往右排列一般在全部是正数运算且不出现负值结果的场合下,可使用无符号数表示。例如,地址运算,编号表示,等等无符号数的编码中没有符号位能表示的最大值大于位数相同的带符号整数的最大值(Why?)•例如,8位无符号整数最大是255(11111111)而8位带符号整数最大为127(01111111)总是整数,所以很多时候就简称为“无符号数”MSBLSB2019/12/2016Signedinteger(带符号整数,定点整数)计算机必须能处理正数(positive)和负数(negative),MSB表示数符有三种定点编码方式•Signedmagnitude(原码)现用来表示浮点(实)数的尾数•One’scomplement(反码)现已不用于表示数值数据•Two’scomplement(补码)50年代以来,所有计算机都用补码来表示定点整数为什么用补码表示带符号整数?•补码运算系统是模运算系统,加、减运算统一•数0的表示唯一,方便使用•比原码和反码多表示一个最小负数•与移码相比,其符号位和真值的符号对应关系清楚2019/12/2017带符号整数和无符号数的比较扩充操作有差别•例如,MIPS提供了两种加载指令(loadbyteunsigned/loadbyte)-无符号数:lbu$t0,0($s0);$t0高24位补0(称为0扩展)-带符号整数:lb$t0,0($s0);$t0高24位补符(称为符号扩展)数的比较有差异•无符号数:MSB为1的数比MSB为0的数大•带符号整数:MSB为1的数比MSB为0的数小•例如,MIPS中提供了不同的比较指令,如:-无符号数:sltu$t0,$s0,$s1(setlessthanunsigned)-带符号整数:slt$t1,$s0,$s1(setlessthan)假定:$s0=11111111111111111111111111111111$s1=00000000000000000000000000000001则:$t0和$t1分别为多少?答案:$t0和$t1分别为0和1。溢出判断有差异(无符号数根据最高位是否有进位判断溢出,通常不判)•MIPS规定:无符号数运算溢出时,不产生“溢出异常”SKIP2019/12/2018扩展操作举例例1(扩展操作):在32位机器上输出si,usi,i,ui的十进制(真值)和十六进制值(机器数)是什么?shortsi=-32768;unsignedshortusi=si;inti=si;unsingnedui=usi;si=-327688000usi=327688000i=-32768FFFF8000ui=3276800008000BACK机器数真值提示:32768=215=1000000000000000B现象:带符号整数:符号扩展无符号数:0扩展2019/12/2019C语言程序中的整数关系表达式运算类型结果说明0==0U-10-10U2147483647-2147483647-12147483647U-2147483647-12147483647(int)2147483648U-1-2(unsigned)-1-2无符号数:uns
本文标题:第2章数据的机器级表示.
链接地址:https://www.777doc.com/doc-2155017 .html