计算机中的数制与编码

目录

原码:

反码:

补码:

转换:

补码的加减运算:

信息编码:


目前,计算机中通常用补码进行带符号数的运算。

  • 原码:

最高为为符号位(0/1),其余数字位表示数的绝对值。

当机器字长为8时,-127原码11111111B +127原码01111111B 可以看出8位二进制原码表示数的范围是-127~+127.

扫描二维码关注公众号,回复: 4616964 查看本文章

原码表示简单直观,且与真值的转换很方便,但是不便于在计算机中进行加减运算。如两数相加,必须先判断两个数的符号是否相同。如果相同则进行加法运算,否则进行减法运算。如进行两数相减,必须比较两数的绝对值大小,再由大数减去小数,结果的符号要和绝对值大的数的符号一致。按上述运算方法设计的算术运算电路很复杂。因此,计算机中通常使用补码进行加减运算,这样就引入了反码表示法和补码表示法。

  • 反码:

正数的反码与其原码相同,负数的反码是在原码的基础上,符号位不变,数值位按位取反。

8位二进制反码表示数的范围是-127~+127.

  • 补码:

正数的补码与其原码、反码相同。负数的补码是在原码基础上,符号位不变,数值位按位取反,末位+1;或者在反码基础上末位+1.

8位二进制补码表示数的范围是-128~+127

  • 转换:

原码转换为真值:由符号位决定数的正负,数值位各位按权展开求和。

反码转换为真值:先求出反码对应的原码。再按原码转真值的方法求。

补码转换为真值:先求出补码对应的原码。整数原码补码相同,负数的原码是在补码的基础上再次求补。

  • 补码的加减运算:

补码加法:x补 + y补 = [x + y]补 

当最高位向更高位的进位由于机器字长的限制而自动丢失时,不会影响计算结果的正确性。

当结果不超出补码表示的范围,计算结果便是正确的补码形式。当计算结果超出补码的表示范围,结果就不正确了,这种情况称溢出。

判断溢出的方法:

通过参加运算的两个数的符号以及运算结果的符号进行判断

单符号位法

双符号位法

这里说一下单符号位:利用溢出标志位OF判断,OF=CF∀DF==1?溢出:未溢出。CF表示符号位向前进位?1:0,DF表示数值部分最高位向前有进位?1:0。

补码减法:x补 - y补 = x补 + [-y]补 = [x - y]补

同样当最高位向更高位的进位由于机器字长的限制而自动丢失时,不会影响计算结果的正确性。

计算机中带符号数用补码表示时的优点:

可以将减法运算变为加法运算,因此可以使同一个运算器实现加法和减法的运算,简化了电路。

无符号数和带符号数的加法运算可以用同一个加法器实现,结果都是正确的。

  • 信息编码:

虽然二进制数对计算机来说是最佳的数制,的那人们却不习惯用它,为了解决矛盾,人们提出一个比较适合于十进制系统的二进制编码的特殊形式,即1位十进制的0-9这十个数字分别用4位二进制码的组合表示,在此基础上对任意十进制数进行编码。这就是二进制编码的十进制数,简称BCD码。BCD码有两种形式,即压缩型BCD码和非压缩型BCD码。

但虽然BCD码可以简化人机练习,但是比纯二进制编码效率低,对同一个给定的十进制数,用BCD码表示的需要的位数比纯二进制码多,运算花费时间也多过程更复杂。由于计算机总是将数当作二进制来运算,所以结果可能出错,因此需要对计算结果进行必要的修正,才能使结果成为正确的BCD码形式。

 修正规则:

如果两个对应位BCD数相加的结果向高位无进位,且结果小于或者等于9,则该位不需要修正;若得到的结果大于9而小于16,则该位需要加6修正;

如果两个对应位BCD数相加的结果向高位有进位,则该位需要加6修正。

原因:十进制数相加应该是”逢十进一“,而计算机按二进制数运算,每四位为一组,低四位向高四位进位与十六进制数低位向高位进位的情况相当,是逢”十六进一“,所以当相加结果超过9将比正确结果少6,结果出错。

猜你喜欢

转载自blog.csdn.net/gary0917/article/details/83931950