zoukankan      html  css  js  c++  java
  • 计算机的运算方法

    1. 无符号数和有符号数

      • 在计算机中参与运算的数有两大类:无符号数和有符号数。

      • 计算机中的数均存放在寄存器中,通常称寄存器的位数为机器字长。所谓无符号数,即没有符号的数,在寄存器中的每一位均可用来存放数值。当存放有符号数时,则需留出位置存放符号。因此,在机器字长相同时,无符号数与有符号数所对应的数值范围是不同的。

      • 对有符号数而言,符号的“正”、“负”机器是无法识别的,但由于“正”、“负”恰好是两种截然不同的状态,如果用“0”表示“正”,用“1”表示“负”,这样符号也被数字化了,并且规定将它放在有效数字的前面,即组成了有符号数。

      • 把符号“数字化”的数称为机器数,而把带“+”或“-”符号的数称为真值。一旦符号数字化后,符号和数值就形成了一种新的编码。在运算过程中,符号位能否和数值部分一起参加运算?如果参加运算,符号位又需作哪些处理?这些问题都与符号位和数值位所构成的编码有关,这些编码就是原码、补码、反码和移码。在这些编码中,补码的应用居多,原因是补码可以带符号运算,而且可以变减为加。

    2. 原码、反码、补码、移码表示法

      • 原码:原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。

      • 反码:反码有两种情况:

        ​ 当原码为正数时,其反码就等于正数的原码。

        ​ 当原码为负数时,其反码就等于正数的原码按位取反,但是最高位的符号位不变。

      • 补码:补码有两种情况:

        ​ 当原码为正数时,其补码就等于正数的原码。

        ​ 当原码为负数时,其补码就等于正数的原码按位取反,符号位不变,最后再在末尾加1(即在反码的末尾加1)。

      • 移码:移码(又叫增码),是符号位取反的补码。

      总结:

      • 正数的原码,补码,反码相同。

      • 负数的反码:原码的数值取反。

      • 负数的补码:原码转换成反码,反码末位加1。

      • 负数的移码:与补码的符号位(第一位数字)相反。

    3. 移位运算

      1. 算数移位规则

        • 机器数为正时,不论是左移还是右移,添补代码均为0。

        • 由于负数的原码数值部分与真值相同,故在移位时只要使符号位不变,其空位均添0。

        • 由于负数的反码各位除符号位外与负数的原码正好相反,故移位后所添的代码应与原码相反,即全部添1。

        • 分析任意负数的补码可发现,当对其由低位向高位找到第一个“1”时,在此“1”左边的各位均与对应的反码相同,而在此“1”右边的各位(包括此“1”在内)均与对应的原码相同。故负数的补码左移时,因空位出现在低位,则添补的代码与原码相同,即添0;右移时因空位出现在高位,则添补的代码应与反码相同,即添1。

      2. 逻辑移位规则

        • 逻辑左移时,高位移丢,低位添0。
        • 逻辑右移时,低位移丢,高位添0。
      3. 加法和减法运算

        加减法运算是计算机中最基本的运算,因减法运算可看做被减数加上一个减数的负值,即A-B=A+(-B),故在此将机器中的减法运算和加法运算合在一起讨论。现代计算机中都采用补码作加减法运算。

      4. 溢出判断

        在计算机中,超出机器字长的现象叫溢出。

        补码定点加减运算判断溢出有两种方法:

        1. 用一位符号位判断溢出

          • 对于加法,只有在正数加正数和负数加负数两种情况下才可能出现溢出,符号不同的两个数相加是不会溢出的。

          • 对于减法,只有在正数减负数或负数减正数两种情况下才可能出现溢出,符号相同的两个数相减是不会溢出的。

        2. 用两位符号位判断溢出

          • 在用变形补码作加法时,2位符号位要连同数值部分一起参加运算,而且高位符号位产生的进位自动丢失,便可得正确结果。
          • 变形补码判断溢出的原则是:当2位符号位不同时,表示溢出,否则,无溢出。不论是否发生溢出,高位(第1位)符号位永远代表真正的符号。

    参考:

    https://blog.csdn.net/cbwem/article/details/79683265

    https://www.cnblogs.com/wander-clouds/p/8796481.html

    https://blog.csdn.net/xdd19910505/article/details/40424533

  • 相关阅读:
    关于Promise的一个案例
    javascript利用map,every,filter,some,reduce,sort对数组进行最优化处理
    写一个根据id字段查找记录的缓存函数(javascript)
    [Android] Upload package to device fails #2720
    Office——检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败
    angularjs环境搭建
    apache+tomcat整合后的编码问题
    zk框架window之间传值操作
    zk框架居中显示
    zk框架销毁Page上的Component
  • 原文地址:https://www.cnblogs.com/thetree/p/13530523.html
Copyright © 2011-2022 走看看