强哥,上一节的定点整数和定点小数概念了解之后我还是有点疑惑,到底了解这些概念有什么具体的用处呢?
知道定点整数和定点小数的概念后,就可以更深刻了解计算机的原码,补码,反码,移码。而掌握这些表示定点数的表示方式,我们可以更加深入理解到计算机数据处理的魅力。
终于到了这一重要部分啦!真值,原码,补码,反码之间的转换关系一直是考查的重点,我们需要熟练掌握它们的定义和表示方式。首先我们还是来回顾一些涉及的基础概念吧!
※ 机器数:在计算机中,通常采用数的符号和数值一起编码的方法来实现数据。常用的有原码,补码和反码表示法。
※ 真值:真值是机器数所代表的实际值。
现在大家应该知道了,所谓原码,补码,反码,移码都是用于机器数的表示方法,并非一种全新的数据。那么我们就正式开始学习它们吧!
原码表示法
1)纯小数的原码定义
2)纯整数的原码定义
这样看可能有些抽象。其实简单来说原码就是符号位加上真值的绝对值,即第一位表示符号,其余位表示值(机器数的最高位表示该数的符号,其余表示数的绝对值)。
现在用例子来解释纯小数原码定义:
纯小数:纯小数是指整数部分为0的小数(如0.2,-0.44)。我们既然需要将数的符号和值一起编码,那么就需要分别讨论数的正负情况。当这个数x是正数,那么纯小数x的取值范围就是[ 0, 1 ),此时根据原码的规则,符号位为0(正数),从数值上来说就和真值相等。当这个数为负数,符号位为1(负数),小数点后的数值就直接保留,数值上就等于1-x。
比如:若x1= +0.1101,x2= -0.1101,字长为8位,则其原码表示为:[x1]原=0.1101000,[x2]原=1-(-0.1101)= 1.1101000,其中最高位是符号位。
了解完纯小数原码定义后,同样的道理也可以理解纯整数的原码定义啦!
这里不知道大家有没有注意到一个小细节:在定义中“0”的特殊?
没错,对于原码而言,真值零是有正零和负零之分的,即[+0]原=00000,[-0]原=10000
这样我们就知道了原码的一些特点:
1)表示简单:正数符号位为0,负数符号位为1,其余位为绝对值。
2)0的表示不唯一。
3)运算复杂:符号位不参加运算,要设置加法,减法器。
补码表示法
1)纯小数的补码定义:
2)纯整数的补码定义:
知道原码的表示方式之后补码其实就水到渠成了:对于正数,补码与原码的表示相同,[x]补=[x]原,对于负数,原码符号位不变,数值部分按位取反,末位加1(即所谓“取反加1”),此规则同样适用于由[x]补求[x]原。
例如:若x1=+0.1001,x2=-0.0110,字长为8位,则补码表示为:[x1]补=.1001000,[x2]补= 2-0.0110=1.1010000。
这里需要注意,真值零的补码表示是唯一的。即[+0]补=[-0]补= 0.0000。
同样我们可以得到补码的一些特点:
1)表示相对于原码复杂。
2)运算简单,只需要设置加法器。
3)0的表示唯一。
反码表示法
1)纯小数的反码定义:
2)纯整数的反码定义:
反码通常作为由原码求补码或由补码求原码的中间过渡。其实反码的表示和补码非常相似:还是来个例子:若x1=+0.0110,x2=-0.0110,字长为8位,则其反码表示为:[x1]反=0.0110000,[x2]反=1.1111111-0.0110000=1.1001111。
注意:真值零的反码表示不唯一,负数的反码符号位为“1”,数值部分求反,[+0]反= 0.0000;
[-0]反= 1.1111 。
一口气将原码,补码,反码的表示讲完,是不是头还有点晕呢?那么我们通过一个图来将这些知识串起来吧!
可能有同学会好奇,既然有正负号表示数据了,为什么要研究原码,补码,反码呢?
我们来了解一下为什么要使用它们吧!
我们可以很清楚的知道第一位是符号位,计算的时候我们会根据符号位选择对数值部分加减。但是我们觉得很简单的加减乘除对于计算机的设计来说还是有些复杂,尤其需要辨别“符号位”,所以提出了将符号位也参与运算的方法。最后我们知道减去一个正数就等于加上一个负数,这样就可以仅使用加法运算器完成运算。
最后我们还是通过题目来巩固下今天的知识吧!
1. 对真值0表示形式唯一的机器数是()。
考试规则:点击你认为正确的选项
A. 原码
回答错误✕
B. 补码和移码
回答正确 √
C. 反码
回答错误 ✕
D. 以上都不对
回答错误✕
答案:B
解析:对于真值0,原码和补码表示方式都不唯一,而补码和移码的表示是唯一的。
2. 若X为负数,则由[X]补求[-X]补是将()。
考试规则:点击你认为正确的选项
A.[X]补各值保持不变
回答错误✕
B.[X]补符号位变反,其他各位不变
回答错误 ✕
C.[X]补除符号位外,各位变反,末位加1
回答错误 ✕
D.[X]补连同符号位一起变反,末位加1
回答正确 √
答案:D
解析:根据前面提过的规律:由[X]补求[-X]补的方法是连同符号位一起,每位取反,末位加1。
交流群