无符号数和有符号数

无符号数

只有数值部分

有符号数

机器数与真值

真值---带符号(+/-)的数

机器数---符号数字化(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]

posted @ 2020-12-02 21:23  顾小朝  阅读(595)  评论(0编辑  收藏  举报