计算机的运算方法

  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

posted @ 2020-08-19 17:17  此树何时枯  阅读(1401)  评论(0编辑  收藏  举报