资讯专栏INFORMATION COLUMN

<Principle Of Computer Organization>学习笔记——原码

OnlyMyRailgun / 839人阅读

摘要:将补数的概念用到计算机中,便出现了补码这种机器数。通常,从原码形式入手来求补码。它与补码的区别是末位少加一个,因此很容易从补码的定义推出反码的定义。若真值为纯小数,它的反码形式为其中表示符号位。

一、原码表示法

原码表示法是一种最简单的机器数表示法,其最高位为符号位,符号位为“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
原码表示方法的优点是直观易懂,机器数和真值间的相互转换很容易,用原码实现乘、除运算的规则很简单;缺点是实现加、减运算的规则较复杂。

二、补码表示法

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) 利用模和同余概念的补码表示法在进行算数运算时可以使减法运算转化为加法运算,从而简化机器的运算器电路。

假设:时钟停在8点,而现在正确的时间是6点,这时拨准时钟的方法有两种:
(1)将分针倒着旋转两圈(即时钟倒拨两个小时),8 - 2 = 6(做减法)
(2)将分针正着旋转10圈(即时钟正拨10小时),8 + 10 = 6(mod 12)(做加法) 此时,8 - 2 = 8 + 10(mod 12)

设: A = -2, B = 10 则:10/12 = (12 - 2)/12 = 1 + -2/12
故:-2和10同余。同余的两个数,具有互补关系,-2余10对模12互补,也可以说-2的补数是10(以12为模)。

可见,只要确定了“模”,就可找到一个与负数等价的正数(该正数即为负数的补数)来代替此负数,而这个正数可以用模加上负数本身求得,这样就可把减法运算用加法实现了。

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

三、反码表示法

反码表示法与补码表示法有很多类似之处,对于整数,数值部分与真值形式相同;对于负数,将真值的数值按位取反。它与补码的区别是末位少加一个“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

四、三种码制的比较

三种码制既有共同点,又有各自不同的性质,主要区别有以下几点: 
(1)对于正数它们都等于真值本身,而对于负数各有不同的表示
(2)最高位都是表示符号位,补码和反码的符号位可作为数值位的一部分看待,和数值位一起参加运算;但原码的符号位不允许和数值位同等看待,必须分开进行处理
(3)对于真值0,原码和反码各有两种不同的表示形式,而反码只有唯一的一种表示形式
(4)原码、反码表示的正、负数范围相对于零来说是对称的;但补码负数表示范围较正数范围宽,能多表示一个最负的数(绝对值最大的负数),其值等于-2^n(纯整数)或-1(纯小数)

参考:计算机组成原理、Structured Computer Organization、Computer Organization and Design-The Hardware/Software Interface

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/100560.html

相关文章

  • &lt;Principle Of Computer Organization&gt;学习笔记——原码

    摘要:将补数的概念用到计算机中,便出现了补码这种机器数。通常,从原码形式入手来求补码。它与补码的区别是末位少加一个,因此很容易从补码的定义推出反码的定义。若真值为纯小数,它的反码形式为其中表示符号位。 一、原码表示法 原码表示法是一种最简单的机器数表示法,其最高位为符号位,符号位为0时表示该数为正,符号位为1时表示该数为负,数值部分与真值相同。若真值为纯小数,它的原码形式为Xs,.X1X2X...

    hsluoyz 评论0 收藏0
  • 设计模式概述

    概念:设计模式(Design Pattern)---人们在面对同类型软件工程设计问题所总结的经验。模式不是代码,而是某类问题的通用设计方案。目的:为了代码的重用性、让代码易于理解,保证代码的可靠性。分类:总体可以分为三大类:设计模式的5+2大原则:1,单一责任原则(Single Responsibility Principle)2,开放封闭原则(Open Closed Principle)3,里氏...

    社区管理员 评论0 收藏0
  • Json-path学习笔记&lt;一&gt;

    摘要:简介是用于结构化数据序列化的一种文本格式,包含种基础类型字符串,数字,布尔和和两种结构类型对象和数组。对象是一个由零或者多个名值对组成的无序集合,其中名值对中名是字符串类型,值则可以是字符串,数字,布尔,,对象或数组类型。 Json JavaScript Object Notation (JSON)是一个轻量级的,基于文本的,跨语言的数据交换格式。它从ECMAScript编程语言标准(...

    Vicky 评论0 收藏0
  • 《HTML与CSS 第一章 认识HTML》读书笔记

    摘要:一让广播明星黯然失色要建立页面,需要创建用超文本标记语言,编写的文件,把它们放在一个服务器上二服务器能做什么服务器在互联网上有一份全天候的工作。一、Web让广播明星黯然失色    要建立Web页面,需要创建用超文本标记语言(HyperText Markup Language,HTML)编写的文件,把它们放在一个Web服务器上二、Web服务器能做什么?  Web服务器在互联网上有一份全天候的工...

    番茄西红柿 评论0 收藏0
  • pygame学习笔记之设置字体及显示中文

      pygame作为python的一个平台库,在做游戏的时候,需要学习的内容还是比较的多的,主要涉及到的内容有相关的学习笔记,包括怎么设置字体,另外还有就是怎么设置其显示中文呢?下面就给大家详细解答下。  一、获得可用字体  importpygame   print(pygame.font.get_fonts())  结果:  ['arial','arialblack...

    89542767 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<