1、原码表示法spa
原码表示法是一种最简单的机器数表示法,其最高位为符号位,符号位为“0”时表示该数为正,符号位为“1”时表示该数为负,数值部分与真值相同。
若真值为纯小数,它的原码形式为Xs,.X1X2X3...Xn,其中Xs表示符号位。原码定义为:
example-1: 若:X = 0.0110 则:[X]原 = X = 0.0110 若:X = -0.0110 则:[X]原 = 1 - X = 1 - (-0.0110) = 1 + 0.0110 = 1.0110
若真值为纯整数,它的原码形式为XsX1X2X3...Xn,其中Xs表示符号位。原码的定义为:
example-2: 若:X = 1101 则:[X]原 = X = 01101 若:X = -1101 则:[X]原 = 2^n - X = 2^4 - (-1101) = 10000 + 1101 = 11101
在原码表示中,真值0有两种不一样的表示形式:
[+0]原 = 00000 [-0]原 = 10000
原码表示方法的优势是直观易懂,机器数和真值间的相互转换很容易,用原码实现乘、除运算的规则很简单;缺点是实现加、减运算的规则较复杂。
2、补码表示法code
1.模和同余为了理解补码表示法,首先须要引入模和同余的概念。图片
模(Module)是指一个计量器的容量,可用M表示。例如:一个4位的二进制计数器,当计数器从0计到15以后,再加1,计数值又变回0.这个计数器的容量M = 2^4 = 16,即模为16.因而可知,纯小数的模为2,一个字长为n + 1位的纯整数的模为2^(n+1)。 同余概念是指两个整数A和B除以同一个正整数M,所得余数相同,则A和B对M同余,即A和B在以M为模时是相等的,可读做: A = B(mod M)。对钟表而言,其模M = 12,故4点和16点、5点和17点、...均是同余的,它们能够写做:4 = 16(mod 12),5 =17(mod 12) 利用模和同余概念的补码表示法在进行算数运算时可使减法运算转化为加法运算,从而简化机器的运算器电路。get
假设:时钟停在8点,而如今正确的时间是6点,这时拨准时钟的方法有两种:
(1)将分针倒着旋转两圈(即时钟倒拨两个小时),8 - 2 = 6(作减法)
(2)将分针正着旋转10圈(即时钟正拨10小时),8 + 10 = 6(mod 12)(作加法) 此时,8 - 2 = 8 + 10(mod 12) it设: A = -2, B = 10 则:10/12 = (12 - 2)/12 = 1 + -2/12
故:-2和10同余。同余的两个数,具备互补关系,-2余10对模12互补,也能够说-2的补数是10(以12为模)。io可见,只要肯定了“模”,就可找到一个与负数等价的正数(该正数即为负数的补数)来代替此负数,而这个正数能够用模加上负数自己求得,这样就可把减法运算用加法实现了。class
example-3: 9 - 5 = 9 + (-5) = 9 + (12 - 5) = 9 + 7 = 4(mod 12) example-4: 65 - 25 = 65 + (-25) = 65 + (100 -25) = 65 + 75 = 40(mod 100)
将补数的概念用到计算机中,便出现了补码这种机器数。
2.补码表示补码的符号位表示方法与原码相同,其数值部分的表示与数的正负有关;对于正数,数值部分与真值形式相同;对于负数,将真值的数值部分按位取反,且在最低位上加1.
若真值为纯小数,它的补码形式为Xs,.X1X1...Xn,其中Xs表示符号位。补码的定义为:原理
example-5: 若:X = 0.0110 则:[X]补 = X = 0.0110 若:X = -0.0110 则:[X]补 = 2 + X = 2 + (-0.0110) = 10 - 0.0110 = 1.1010
若真值为纯整数,它的补码形式为XsX1X2...Xn,其中Xs表示符号位。补码定义为:
example-6: 若:X = 1101; 则:[X]补 = X = 01101; 若:X = -1101; 则:[X]补 = 2^(n+1) + X = 2^5 + (-1101) = 100000 - 1101 = 10011
在补码表示中,真值0的即是形式是惟一的:
[+0]补 = [-0]补 = 0000
3.由真值、原码转换为补码采用补码系统的计算机须要将真值或原码形式表示的数据转为补码形式,以便于运算器对其进行运算。一般,从原码形式入手来求补码。
当X为正数时,[X]补 = [X]原 = X。 当X为负数时,其[X]补等于把[X]原除去符号位外的各位求反后再加“1”。
反之,当X为负数时,已知[X]补,也可经过对其除符号位外的各位求反加“1”求得[X]原二进制当X为负数时,由[X]原转换为[X]补得另外一种更有效的方法是:自低位向高位,尾数的第一个“1”及其右部的“0”保持不变,左边的各位取反,符号位保持不变。方法
example-7: 若:[X]原 = 1.1110011000 则:[X]补 = 1.000110***1000***(符号位和斜体部分不变,其余位取反)
这种方法避免了加1运算,是实际求补线路逻辑实现的依据。
也能够直接由真值X转换为[X]补,其方法更简单:数值位自低位向高位,尾数的第一个“1”及其右部的“0”保持不变,左部的各位取反,负号用“1”表示。
example-8: 若:X = -0.1010001010 则:[X]补 = 1.0101110110
3、反码表示法
反码表示法与补码表示法有不少相似之处,对于整数,数值部分与真值形式相同;对于负数,将真值的数值按位取反。它与补码的区别是末位少加一个“1”,所以很容易从补码的定义推出反码的定义。
若真值为纯小数,它的反码形式为Xs,.X1X2...Xn,其中Xs表示符号位。反码的定义为:
example-9: 若:X = 0.0110 则:[X]反 = 0.0110 若:X = -0.0110 则:[X]反 = (2 - 2^-n) + X = (2 - 2^-4) + (-0.0110) = 1.1111 + (-0.0110) = 1.1111 - 0.0110 = 1.1001
若真值为纯整数,它的反码形式为XsX1X2...Xn,其中Xs表示符号位。反码的定义为:
example-10: 若:X = 1101 则:[X]反 = 01101 若:X = -1101 则:[X]反 = (2^(n+1) - 1) + X = (2^5 - 1) + (-1101) = 11111 - 1101 = 10010
在反码表示中,真值0也有两种不一样的表示形式:
[+0]反 = 00000 [-0]反 = 11111
4、三种码制的比较
三种码制既有共同点,又有各自不一样的性质,主要区别有如下几点:
(1)对于正数它们都等于真值自己,而对于负数各有不一样的表示
(2)最高位都是表示符号位,补码和反码的符号位可做为数值位的一部分看待,和数值位一块儿参加运算;但原码的符号位不容许和数值位同等看待,必须分开进行处理
(3)对于真值0,原码和反码各有两种不一样的表示形式,而反码只有惟一的一种表示形式
(4)原码、反码表示的正、负数范围相对于零来讲是对称的;但补码负数表示范围较正数范围宽,能多表示一个最负的数(绝对值最大的负数),其值等于-2^n(纯整数)或-1(纯小数)
参考:计算机组成原理、Structured Computer Organization、Computer Organization and Design-The Hardware/Software Interface