欢迎访问WDPHP素材源码!今天是2024年04月28日 星期日,又是一个不眠夜!
您好,游客 [ 马上登录 | 注册帐号 | 微信登录 | QQ登录]
当前位置:首页 > 教程 > 其他教程 > 

计算机组成原理机器数概念与转换的方法是什么
栏目分类:其他教程    发布日期:2023-09-21    浏览次数:325次     收藏

本文小编为大家详细介绍“计算机组成原理机器数概念与转换的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“计算机组成原理机器数概念与转换的方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

    一、原码、反码、补码、移码的概念

    1. 真值

    二进制数和十进制数一样有正负之分。书写时可以用"+"和"-"来表示数据的符号,这种书写格式称为真值。

    例如:十进制的+3和-5,二进制的+011和-101都是真值。

    2. 机器数

    由于数据只有正、负两种符号,因此在计算机中很自然就采用二进制的0和1来表示数据的符号,由符号和数值一起编码表示的二进制数称为机器数或机器码。常用的机器数有原码、反码、补码和移码。

    例如:(这里的机器数都是原码)1,0001第一位表示符号位,1表示负数,逗号将符号位和数值位区分开,逗号后面的是数值位,0001是二进制,所以转换为十进制后,真值就是 -1;

    再比如 0,101表示的十进制数的真值是+5。

    1. 原码

    原码就是符号化的数值,其编码规则简单直观:正数符号位用0表示,负数符号位用1表示,数值位保持不变。

    例如:

    x=+0.1101,则[x]原=0.1101;x=+1101,则[x]原=01101

    x= -0.1111,则[x]原=1.1111; x= -1111,则[x]原=11111

    原码数据表示简单直观,只需将符号位加上二进制数的绝对值即可。但原码存在两个机器0,这会给数据运算带来麻烦。另外原码的加减法运算复杂,符号位不能直接参与运算。加法运算需要“同号求和,异号求差”,减法运算需要“一号求和,同好求差”,求差时还需要先比较大小,然后用大数减去小数,最后结果的符号选择也相对复杂。显然,利用原码作为机器数在实现加减法运算方面是不方便的,原码在计算机中目前仅仅用于表示浮点数的尾码。

    2. 反码

    反码又称1的补码,其符号位和原码相同,真值为正数时,反码和原码相同;真值为负数时,反码数值位为真值数值位取反。

    例如:

    x=+0.1101,则[x]反=0.1101;x=+1101,则[x]反=01101

    x= -0.1111,则[x]反=1.0000;x= -1111,则[x]反=10000

    反码的符号位和原码相同,当真值为负数时,数值位需要逐位取反。同样反码也存在+0和-0两个0.反码的加减运算较原码略简单,其符号位可以直接参与运算,加法运算直接将反码相加即可,但最高位进位要从运算结果最低位相加(循环进位)。减法运算只需要将被减数的反码加上减数负数的反码即可,同样也要采用循环进位的运算方法。但尽管如此,现代计算机中并没有采用反码进行数据表示和运算,这是因为人们找到了更好的编码——补码。

    3. 补码

    计算机中的二进制数据都有字长的限制,数据最高位进位的位权值就是模数,运算结果超过模数的部分都会被自动舍弃,所以计算机二进制数据的运算属于典型的有模运算,非常适合采用补码进行表示和运算。

    例如:

    x=+0.0101,则[x]补=0.0101;

    x= -0.0101,则[x]补=1.1011;

    x= -0.0000,则[x]补=0.0000;

    x= -1.0000,则[x]补=1.0000;

    补码的表示相对原码更加复杂,但其只有唯一的0,符号位可以直接参与运算,运算时符号位的进位作为模会自动舍弃,其独特的表示方法使得减法运算可以转换成加法运算,大大方便了二进制的运算。目前计算机中普遍采用补码表示有符号整数。

    4. 移码

    移码只用于定点整数的表示,通常用于表示浮点数的阶码。其编码方式是直接将真值x加一个常数偏移量。

    例如:

    x=+1010110,则[x]移=11010110;

    x= -1010110,则[x]移=00101010;

    移码具有以下特点:

    ① 移码的符号位中0表示负数,1表示正数;

    ② 同一数值的移码和补码除符号位相反外,其他各位相同;

    ③ 移码中0的表示也唯一,具体表示为100000……。

    二、原码、反码、补码、移码的转换

    1. 原码转反码

    当原码的真值为正数时,反码的机器数就等于原码的机器数

    当原码的真值为负数时,反码的机器数等于原码的机器数取反(符号位不变)

    例如:

    x=+0.1101,则[x]反=0.1101;x=+1101,则[x]反=01101

    x= -0.1111,则[x]反=1.0000;x= -1111,则[x]反=10000

    2. 原码转补码

    当原码的真值为正数时,补码的机器数就等于原码的机器数

    当原码的真值为负数时,补码的机器数等于原码的机器数取反再加1(符号位不变)

    例如:

    x=+0.0101,则[x]补=0.0101;

    x= -0.0101,则[x]补=1.1011;

    x= -0.0000,则[x]补=0.0000;

    x= -1.0000,则[x]补=1.0000;

    简单来说,原码的反码加1就是补码

    3. 原码转移码

    当原码的真值为正数时,移码的机器数等于原码,但是符号位要改变

    当原码的真值为负数时,移码的机器数等于原码机器数取反加1(符号位取反)

    例如:

    x=+1010110,则[x]移=11010110;

    x= -1010110,则[x]移=00101010;

    简单来说,原码的补码数值位不变,符号位取反就是移码

    源码 模板 特效 素材 资源 教程 站长