【计算机组成原理】反码&补码&移码的定义、相互转换及特征

您所在的位置:网站首页 二进制补码转换为源码的方法有哪些例子 【计算机组成原理】反码&补码&移码的定义、相互转换及特征

【计算机组成原理】反码&补码&移码的定义、相互转换及特征

2024-07-02 01:02| 来源: 网络整理| 查看: 265

前言:     今天我也来写博客啦!昨天因为时间的原因遗留了反码、补码、移码等问题,今天狠狠滴把它解决! look:了解真值、机器数、原码请点击:真值与机器值&小数原码与整数原码定义及举例

1. 反码

    反码其实就是原码与补码之间的过渡,一句话总结:正数不变,负数数值取反。一般用[x]反表示x这个真值的反码机器数;反码的定义中有小数反码和整数反码,同样先来看整数反码:

1.1 纯整数反码 纯整数反码定义 = = [x]反 0,x 2^(n+1)-1+x 2^n>x≥0 0≥x>-2^n mod 2^(n+1)-1 其中x是真值,n是整数位数(字节);若字节长为n+1,则反码整数的表示范围为 -(2n-1)≤x≤2n-1 关于原点对称(与原码相同)。举例子(以二进制八位为例): +5 = [0,0000101]原 = [0,0000101]反 (正数的反码是它本身)-116 = [1,1110100]原 = [1,0001011]反 (除符号位外,所有的数值位取反) 1.2 纯小数反码 纯小数反码定义 = = [x]反 x 2-2^(-n)+x 1>x≥0 0≥x>-1 mod 2-2^(-n) 若字节长为n+1,则反码整数的表示范围为 -(1-2-n)≤x≤1-2-n 关于原点对称(与原码相同)。举例子: 0.25 = [0.0100000]原 = [0.0100000]反(正数的反码是它本身)-0.75 = [1.1100000]原 = [1.0011111]反(除符号位外,所有的数值位取反)

注:

+0 = [0,0000000]原 = [0,0000000]反-0 = [1,0000000]原 = [1,1111111]反;   0的原码和反码表示都不唯一! 2 补码

    补码一句话总结:正数不变,负数=反码+1=原码所有数值位取反+1。一般用[x]补表示x这个真值的补码机器数;反码的定义中有小数补码和整数补码,同样先来看整数补码:

2.1 纯整数补码 纯整数补码定义 = = [x]补 0,x 2^(n+1)+x =2^(n+1)-|x| 2^n>x≥0 0≥x≥-2^n mod 2^(n+1) 其中x是真值,n是整数位数(字节);若字节长为n+1,则补码整数的表示范围为 -2n≤x≤2n-1 (比原码多表示一个“-2n”,原因后面解释)。举例子(以二进制八位为例): +5 = [0,0000101]原 = [0,0000101]反 = [0,0000101]补(正数的补码是它本身)-116 = [1,1110100]原 = [1,0001011]反 = [1,0001100]补(反码+1 或 原码数值位取反+1) 2.2 纯小数补码 纯小数补码定义 = = [x]补 x 2+x=2-|x| 1>x≥0 0>x≥-1 mod 2 若字节长为n+1,则反码整数的表示范围为 -1≤x≤1-2-n (比原码多表示一个“-1^”,原因后面解释)。举例子: 0.25 = [0.0100000]原 = [0.0100000]反 = [0.0100000]补(正数的补码是它本身)-0.75 = [1.1100000]原 = [1.0011111]反 = [1.0100000]补(反码+1 或 原码数值位取反+1)

注:

+0 = [0,0000000]原 = [0,0000000]反 = [0,0000000]补 = -0-0 = [1,0000000]原 = [1,1111111]反 = [0,0000000]补 = +0 0的补码唯一! 那么问题又来了,既然+0、-0都由[0,0000000]补表示,那 [1,0000000]补表示的是什么呢? 想要解决这个问题,我们就要使用定义来探讨了: 由定义得: [-1]补(带入小数定义2+x计算) = 10.0000000 - 1.0000000 = 1.0000000;小数补码比原码多表示一个"-1"[-128]补(带入整数定义2(n+1)-|x|) = 28-128=128 = 1,0000000 ;整数补码比原码多表示一个"-128" 3. 移码

    在真值X上加上一个常数(偏置值),通常这个常数取2n,相当于X在数轴上向正方向偏移了若干单位。一句话总结移码表示方法:补码的基础上将符号位取反。一般用[x]移表示x这个真值的移码机器数;移码只能用来表示整数。

3.1 移码的定义 = 条件 [x]移 2^n+x 2^n>x≥2^(-2)

其中机器字长1为n+1;移码的整数范围:-2n≤x≤2n-1 。原码转移码举例:

+5 = [0,0000101]原 = [0,0000101]反 = [0,0000101]补 = [1,0000101]移(正数移码 = 正数原码符号取反)-116 = [1,1110100]原 = [1,0001011]反 = [1,0001100]补 = [0,0001100]移(负数移码 = 原码全部取反后 + 1 = 补码的符号位取反)

也可以从定义上来理解(字长8位):

x1 = +10101—> [x1]移= 27 + 10101 = 1,0010101( x1 = 20 + 22 +24 = 21D2 )x2 = -10101—> [x2]移 = 27 + (-10101) = 0,1101011(- x2 = -21D ) 3.2 移码的特点 移码中的零表示唯一,[+0]移 = 2n + 0 = [-0]移 = 2n - 0 = 100…0(n个"0")移码全为 0 时,对应真值的最小值 -2n;移码全为 1 时,对应真值的最大值 2n-1;保持数据原有的大小顺序,移码大真值大,移码小真值小(谁想出来的,太天才了!)

结束语:     花了好一会儿终于把反码、补码、移码的定义及之间的转换总结完成了!下次更新进制间的转换或者加减乘除?,要不还是技术文章吧(基础博客写起来好累)。不积跬步无以至千里,希望自己可以每天努力一点!

机器字长:计算机进行一次整数运算所能处理的二进制数据的位数(整数运算即定点整数运算) ↩︎

B(binary):二进制;D(decimal):十进制;O(Otcal)&Q:八进制(因为O和0太容易混淆;一般使用Q);H(Hexadecimal):十六进制;所以这里的21用十进制表示为21D,当然十进制字母可以省略。 ↩︎



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3