无符号数和有符号数

时间:2024-03-25 14:56:49
无符号数

计算机的数都存档在寄存器中,寄存器位数也成为机器字长。
无符号数也就是没有符号的数,寄存器中每一位都用来存放数值。

有符号数

有符号的数,寄存器中要分出一位来表示数值的正负。

  • 机器数和真值
    正数用0表示,负数1表示

    • 整数:符号位与数值用逗号隔开
    • 小数:符号位与数值用小数点隔开
  • 原码表示法(符号位正数用0表示,负数1表示)
    整数:
    正数: 【x】原 = 0,x
    负数: 【x】原 = 2^n-x
    小数:
    正数: 【x】原 = x
    负数: 【x】原 = 1-x
    无符号数和有符号数本来说原码计算是相对简单的,但问题在于有时候明明是加法运算却要用到减法器,比如两个操作数符号不同做加法,得先求绝对值,大的减小的,结果符号以绝对值大的为准,所以才有了补码。

  • 补码表示法(符号位正数用0表示,负数1表示)
    整数:
    正数: 【x】原 = 0,x
    负数: 【x】原 = 2^n-x
    小数:
    正数: 【x】原 = x
    负数: 【x】原 = 1-x
    无符号数和有符号数补码运算有个要注意的是,他的0无论正负,补码都相同,这说明补码可以比源码、反码多表示一个负数。
    简单记为“求反加1”

  • 反码表示法(符号位正数用0表示,负数1表示)
    整数:
    正数: 【x】原 = 0,x
    负数: 【x】原 = 2^n-x
    小数:
    正数: 【x】原 = x
    负数: 【x】原 = 1-x
    无符号数和有符号数反码其实就是原码每位求反

  • 综合三种

  1. 三种表示方法最高位均为符号位,且当真值位正数的时候,三种表示方法均相同
  2. 而当真值是负数的时候,符号位都用1表示,补码是原码的求反加一,反码是原码的各位求反。
  • 移码表示法
    其实移码只跟补码相差一个符号位
    当然也可以根据公式
    【x】移 = 2^n +x