The website uses cookies. By using this site, you agree to our use of cookies as described in the Privacy Policy.
I Agree

软件设计师考试笔记一:原码、反码、补码及移码

软件设计师,简称软设,以下文章是我准备软件设计师考试时的一些笔记,主要是在复习这本厚厚的《软件设计师教程》中遇到比较疑难问题的记录。

目录

一、原码、反码、补码及移码

二、磁盘存储器结构

讲在概念之前

在理解这四个名词前,一定要了解一些基础知识:数值在计算机中以是机器数的形式表示的,它使用二进制计数制。为什么使用二进制呢,因为电脑只认识0和1,当然原因是因为电子管使用高低电流脉冲来去表示1和0,这样CPU中数以万计的晶体管就会通过复杂的电路来去运算各种复杂的运算。

机器数分为无符号数和带符号数,带符号数又分为纯整数和纯小数,如1234.04、3.14是纯整数,0.01是纯小数。对于带符号数,机器数最高位用来表示正、负符号位,其中0表正号,1表示负号。

为什么要使用原码、反码等进行运算,如何你之前有电子电路的基础,相信教材上一定讲过,简单一点的讲解可以参考为什么要使用原码、反码、补码

另外需要了解机器字长的概念,机器字长是指计算机能进行多少位的二进制的并行运算。也就是该计算机运算器一次最多能进行多少位的运算,机器字长越长,运算精度越高。而一般操作系统位数就是针对机器字长进行设计的,比如windows的32位操作系统和64位操作系统。32位的机器字长,可以认为CPU那部分的马路是32车道的,又由于还有CPU到内存的马路(前端总线),以及内存那段马路的(主存储器字长),还有内存到外设芯片(北桥南桥)这段马路的(外部总线)。

这里还要再补充一下十进制小数转化为二进制小数的方法:对十进制小数乘以2得到的整数部分和小数部分,整数部分即是相应的二进制数码,再用2乘小数部分,结果再取整数部分,如此反复,直到小数部分为0或达到精度为止。第一次得到的为最高位,最后一次得到为最低位。

如计算+0.52的二进制:

1、0.52*2=1.04 (取整得到1)

2、0.04*2=0.08 (取整得到0)

3、0.08*2=0.16 (取整得到0)

4、0.16*2=0.32 (取整得到0)

5、0.32*2=0.64 (取整得到0)

6、0.64*2=1.28 (取整得到1)

7、0.28*2=0.56 (取整得到0)

……

如果取机器字长为8情况下,则+0.52的二进制就是01000010;如果是32位的话,那就需要多算一会了

对于小于-1的小数,需要拆分成整数部分和小数部分,整数采用除基数再倒取余数法。小数如上所述,以-6.25为例:

a、整数部分为6:

1、6/2=3 (取余数0)

2、3/2=1 (取余数1)

3、1/2=0  (取余数为1)

那么整数6的二进制就是110

b、小数部分为0.25

1、0.25*2=0.5 (取整数0)

2、0.5*2=1.0 (取整数1)

所以小数部分0.25二进制就是01。(这里是不带符号位的6.25二进制表示)即:

 

-6.25就是前面加小数位,即:

原码

定义机器字长为n,若数值X是纯整数

若数值X是纯小数,对纯小数的原码计算是先将其转换为二进制(必须的~)

例:若机器字长为8,则:

[+1]=0 0000001         [-1]=1 0000001     [+7]=0 0000111   [+127]=0 1111111

[-127]=1 1111111     [-7]=1 1111000     [+0.5]=0♢1000000   [-0.5]=1♢1000000

对于0来说,其原码有两种表示方式:[+0]=0 0000000,[-0]=1 00000000

反码

机器数的反码可由原码得到。若机器数为正数,则其反码与原码一样;如果机器数为负数,则其反码是对它的原码(除符号位外)各位取反而得到的。也可用公式表示,若X是纯整数,则:

若X是纯小数,则:

例:若机器字长为8,则:

[+1]反=0 0000001   [-1]反=1 1111110    [+7]反=0 0000111   [-7]反=1 1111000   [+127]反=0 1111111     [-127]反=1 0000000

[+0.5]反=0♢1000000   [-0.5]反=1♢0111111

对于0来说,反码也有两种表示方式:[+0]反=0 0000000   [-0]反=1 1111111

补码

机器数的补码可由原码得到。若机器数为正数,则其补码与原码一样;如果机器数为负数,则其补码是对它的原码(除符号位外)各位取反,再加1而得到的(也就是对其反码再加1)。也可用公式表示,若X是纯整数,则:

若X是纯小数,则:

例:若机器字长为8,则:

[+1]=0 0000001   [-1]=1 1111111    [+7]=0 0000111   [-7]=1 1111001   [+127]=0 1111111     [-127]=1 0000001

[+0.5]=0♢1000000   [-0.5]=1♢1000000

对于0来说,补码有唯一的表示方式:[+0]=0 0000000   [-0]=0 0000000

移码

机器数的移码是在数X上增加一个偏移量来定义的,它常用于表示浮点数中的阶码。移码和补码的关系是符号位互为反码。如果机器字长为n,规定该偏移量为2n-1,移码定义如下:

若X是纯整数,[X]=2n-1+X   (-2n-1≤X<2n-1)

若X是纯小数,[X]=1+X    (-1≤X<1)

例:若机器字长为8,则:

[+1]=1 0000001   [-1]=0 1111111    [+7]=1 0000111   [-7]=0 1111001   [+127]=1 1111111     [-127]=0 0000001

[+0.5]=1♢1000000   [-0.5]=0♢1000000

对于0来说,补码有唯一的表示方式:[+0]=1 0000000   [-0]=1 0000000

由于四种数据表示相互之间都存在一定的转换关系,因为推荐先求其原码,然后再根据该关系转换到该码制。

参考:

软件设计师教程(第三版),第一章,计算机系统知识,p4~6

Measure
Measure
Summary | 3 Annotations
移码和补码的关系是符号位互为反码
2020/12/14 09:28
[+0]移=1 0000000   [-0]移=1 0000000
2020/12/14 09:28
先求其原码,然后再根据该关系转换到该码制
2020/12/14 09:28