当前位置: 首页 > 编程语言 > 汇编语言 > 正文

计算机体系结构(二) 码制知识

时间:2014-10-30 龙轩

现在很多程序员,只是会用计算机编程,但是许多基础的知识却很薄弱。今天就跟大家说说码制的问题。计算机对数据做的读取、传输、运算、显示等操作,都离不开码制。常见的编码方式有:原码、反码、补码、移码、BCD码。我们一一说道。

【原码】

表示:最高位为符号位(0表正,1表负),其余各位为数的绝对值。

举例: [+11]原 =00001011  。 [-11]原 = 10001011 。

范围:-127~+127

优点:乘除法操作比较简单

缺点:0有2种表示方法, [+0]原 =00000000, [-0]原 =10000000 。加减法运算可能会出现溢出错误。

错误再现:(1)10 + (1)10 =  (0)10 ,用原码表示的: (00000001)2 + (10000001)2 = (10000010)2 =  (-2)10

错误原因:原码的符号位不能直接参与运算,否则可能会出现错误。

为了解决原码的加减法缺陷,引入了一个新的编码——反码。

【反码】

表示:由原码转换而来,正数跟原码一致;负数,符号位不变,其余各位按位取反。

举例: [+11]反 = [+11]原 =00001011 。 [-11]反 = 11110100 。

范围:-127~+127

优点:符号位可以直接参与运算。减法可以变为加法运算。

缺点:0有2种表示方法,  [+0]反  =00000000,  [-0]反 =11111111

错误再现:(1)10 + (1)10 =  (0)10 ,使用反码的结果是: (00000001)2 + (11111110)2 = (11111111)2 =  (-0)10

本栏目更多精彩内容:http://www.bianceng.cn/Programming/hb/

解决了加减法缺陷,还需要解决0编码的问题,遂又引入了一个新的编码——补码。

【补码】

表示:由反码转换而来,正数跟原码一致;负数,反码+1。

举例: [+11]补 = [+11]原 =00001011 。 [-11]补 = 11110101 。

范围:-128~+127

优点:符号位可以直接参与运算。减法可以变为加法运算。0有唯一编码,  [+0]补 =[-0]补 =00000000 。

现在 (1)10 + (1)10 =  (0)10 ,用补码表示的: (00000001)2 + (11111111)2 = (00000000)2 =  (0)10,结果正确。

溢出判断:两个正数相加,如果符号位变为1,则溢出。两个负数相加,符号位变为了0,则溢出。正数+负数则不会溢出。

【移码】

表示:跟补码数值位一样,但符号位取反。

举例: [+11]移 = 10001011 。 [-11]移 = 01110101 。

范围:-128~+127

【8421BCD码】

表示:十进制数每位都用4位2进制数表示 。

举例: 43 => 0100 0011 。

优点:容易读数,二进制和十进制的转换快捷,适用于会计系统。

溢出修正:结果>=9,则+6,进1 。如3+5:0011 + 0101 = 1000 正确。6+7:0110 + 0111 = 1101,结果需修正,1101+0110 = 10011 =(13)10