无符号数
只有数值部分
有符号数
机器数与真值
真值---带符号(+/-)的数
机器数---符号数字化(0/1)的数
把真值保存在计算机中考虑的三个部分 : 符号,数值,小数点
1.小数点的位置是设计计算机时就约定好的:
小数: 小数点位置在符号位之后---小数定点机
整数: 小数点位置在数值之后---整数定点机
原码表示法--带符号的绝对值表示
整数
如
x = +1110
[x]原=0, 1110 用逗号将符号位和数值部分隔开
x = -1110
[x]原=1, 1110
小数
如
x = +0.1101
[x]原=0. 1101 用小数点将符号位和数值部分隔开
x = -0.1101
[x]原=1. 1101
原码中有逗号的是整数, 有小数点的是小数, 但计算机是不需要存储逗号或小数点的,此处仅仅是为了人阅读方便
注意!! 原码中符号位的0与真值中小数点前的0的意义是不一样的
补码表示法
理念: 在加法运算中, 找到一个与负数等价的正数,来代替这个负数,使实际上的减法操作转换为加法操作(引入补码的原因需要理解,但计算公式直接硬记就好了)
结论:
1.一个负数加上"模"即得该负数的补数
2.一个正数和一个负数互为补数时,他们的绝对值之和即为模数
整数
如
x = +1010
[x]补=0, 1010 用逗号将符号位和数值部分隔开
x = -1011000
[x]补=1, 0101000 (数值位按位取反再加一,加一按二进制计算规则)
小数
!!: 机器数是有位数约定的,有时小数补码的值与真值并不相同(有可能会因为位数问题舍去)
如
x = +0. 1110
[x]补=0. 1110 用小数点将符号位和数值部分隔开
x = -0. 1100000
[x]补=1. 0100000
当真值为"负"时---[x]补->[x]原 :将补码按位取反再加一 (符号位不变)
不管是整数还是小数[+0]补 = [-0]补
[-1]补 = 1. 0000, [-1]原不能表示
反码表示法
其实我觉得没什么好说了,这比求补码还简单..
除了符号位,数值位按位取反
[+0]反不等于[-0]反
三种机器数小结
1.最高位为符号位
2.对于正数, 原码=反码=补码
3.对于负数,符号位为1, 其数值部分按位取反+1 = 补码;数值部分按位取反=反码
例子
已知[y]补 , 求[-y]补
[y]补连同符号位在内, 每位取反, 末位+1, 即得 [-y]补
移码表示法
引入原因: 补码表示很难直接判断其真值大小
1.移码只用于表示整数
2.一个真值的移码和补码仅仅相差一个符号位。无论正负。
其他的表示方法都与别的机器码相同
3.移码保持了数据原有的大小顺序,移码大真值就大,移码小,真值就小。
4.最小的真值移码全为0
5.[+0]移 = [-0]移