无符号数
计算机的数都存档在寄存器中,寄存器位数也成为机器字长。
无符号数也就是没有符号的数,寄存器中每一位都用来存放数值。
有符号数
有符号的数,寄存器中要分出一位来表示数值的正负。
-
机器数和真值
正数用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表示,补码是原码的求反加一,反码是原码的各位求反。
- 移码表示法
其实移码只跟补码相差一个符号位
当然也可以根据公式
【x】移 = 2^n +x