zoukankan      html  css  js  c++  java
  • 原码-反码-补码-移码的运算及作用

    索引
    1 源码->反码—>补码->移码是怎么换算的

    2 他们的作用

    3 总结


    源码、反码、补码、移码在计算机中是怎么运算的?

    数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负).这就是机器数的原码了.假设机器能处理的位数为8.即字长为1byte,原码能表示数值的范围为 127~(-127)
    另外,我们需要知道,在计算机中都是以补码的储存负数的(正数的补码等于他本身,所以也可以理解为计算机储存的是补码),那么我们从源码->反码的过程其实是为了计算补码的一个计算的过程。

    运算过程:原码->反码->补码->移码

    原码 :二进制(开头第一个表示符号0正1负)

    反码 :在原码的基础上,符号位不动,其他位取反 ---注意,任何正数的源码=反码=补码,而负数都是通过补码表示的。
    补码 :在反码的基础上,运算+1  ---注意,任何正数的源码=反码=补码,而负数都是通过补码表示的。 
    公式:两数补码的和==两数和的补码。

    移码 :在补码的基础上,符号位取反
    101011(二进制)--> 原码 00101011 --> 反码 01010100 --> 补码 01010101--> 移码 11010101

    知道了计算方式后,我们应该研究一下源码、反码、补码的作用是什么?
    1 首先看源码
    问:什么是源码?
    答:数字的二进制形式(二进制的数)
    问:为什么要用源码?

    答:我是从2个方面看 1 从目前计算机的构造来看它只认识1/0,所以任何指令、数字、都会翻译成一个二进制数传递给计算机。
    2 规范和统一计算机的“交流语言”,统一对外的接口。
    总结:源码是计算机唯一认识的语言结构。

    2 反码和补码
    问:反码是什么?
    答:在源码的基础上符号位不动,其他取反
    问:为什么要用反码?
    答:这个问题需要配合补码一起查看,因为补码=反码+1 所以一般的计算顺序为 源码-->反码-->补码
    *问:补码是什么?
    答: 补码=反码+1(符号位参与运算)
    问:为什么要用补码?
    答:为了进行做加减运算,因为计算机只有加法计算器,所以a-b的处理方式为a+(-b),而这过程中如果直接用源码进行计算会出现问题

    例1 10+(-10)= 0 (当使用源码进行计算减法)
    10(十进制) -- 00001010(源码)
    -10(十进制) -- 10001010 (源码)
      00001010+
    10001010
    -----------
    1XXXXXXX ----->首先看到第一位是负数,显然不是我们想要的结果

    例子2 10-11 (试试用减法直接做计算吧)
      10(十进制) -- 00001010(源码)
    -11(十进制) -- 10001011(源码)

    00001010-
    10001011
    ------------
    xxxxx11111----->可以看到貌似跟答案-1(十进制)差距还是比较明显的

    现在我们尝试应用补码进行计算
    例子3 10+(-10)=0 (使用补码)
    10(十进制) --- 00001010(源码)----同源码(反码)----同源码(补码)
    -10(十进制) --- 10001010(源码)----11110101(反码)----11110110(补码)

    00001010+ 10的源码----注意正数用补码(值等同于源码)
    11110110 -10的补码----注意负数用补码
    ---------
    00000000 得到了0的补码

    例子3 10-11 (使用补码)
     10(十进制) --- 00001010(源码)----同源码(反码)----同源码(补码)
    -11(十进制) --- 10001011(源码)----11110100(反码)----11110101(补码)
    00001010+    10的补码
    11110101 -11的补码
    ------------
    11111111--- 得到了-1的反码

    从这4个例子可以看出反码和补码使用的作用了,用于为二进制负数做运算时的一种转换。

    再次总结运算过程
    数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负).这就是机器数的原码了.假设机器能处理的位数为8.即字长为1byte,原码能表示数值的范围为 127~(-127)

    运算过程:原码->反码->补码->移码

    原码 :二进制(开头第一个表示符号0正1负)

    反码 :在原码的基础上,符号位不动,其他位取反 ---注意,任何正数的源码=反码=补码,而负数都是通过补码表示的。
    补码 :在反码的基础上,运算+1  ---注意,任何正数的源码=反码=补码,而负数都是通过补码表示的。 
    公式:两数补码的和==两数和的补码。

    移码 :在补码的基础上,符号位取反























  • 相关阅读:
    stenciljs 学习四 组件装饰器
    stenciljs 学习三 组件生命周期
    stenciljs 学习二 pwa 简单应用开发
    stenciljs ionic 团队开发的方便web 组件框架
    stenciljs 学习一 web 组件开发
    使用npm init快速创建web 应用
    adnanh webhook 框架 hook rule
    adnanh webhook 框架 hook 定义
    adnanh webhook 框架request values 说明
    adnanh webhook 框架execute-command 以及参数传递处理
  • 原文地址:https://www.cnblogs.com/sunfan1988/p/3850242.html
Copyright © 2011-2022 走看看