定点数的表示和运算

文章目录

  • 真值(有正负号)和机器数(0正1负)
  • 原码
    • 整数
    • 小数
  • 补码
    • 负数的补数
    • 正数的补数
    • [y]~补~ ==> [-y]~补~
  • 反码
  • 小结
  • 移码
  • 移位运算
  • 加减法运算
    • 溢出判断

真值(有正负号)和机器数(0正1负)

定点数的表示和运算_第1张图片

无符号数与真值and机器数都不是一个概念

定点数的表示和运算_第2张图片定点数的表示和运算_第3张图片

移码不是有符号数 ,它没有符号位,他是用于比较大小

原码

整数

定点数的表示和运算_第4张图片
定点数的表示和运算_第5张图片
定点数的表示和运算_第6张图片

n位整数,
最大值为,2ⁿ-1
最小时绝对值取最大,最小为-(2ⁿ-1)

原码的0有两种表示 +0:0,0000 -0:1,0000

小数

定点数的表示和运算_第7张图片
定点数的表示和运算_第8张图片

数值位为n,对于小数: 最大值为1-2的(-n)次方 最小时绝对值取最大,最小为-(1-2的(-n)次方)

最大值:0.1111—》0.1111+0.0001=1
最小值:-0.1111


小数原码的0有两种表示,这个和整数一样 假设数值位为4 +0:0.0000 -0:1.0000

定点数的表示和运算_第9张图片
定点数的表示和运算_第10张图片定点数的表示和运算_第11张图片

定点数的表示和运算_第12张图片
定点数的表示和运算_第13张图片

8位原码表示的范围是0——255,一共是256个数
范围是-127到+127【因为有一位是符号位】
不过比若说5位原码0,0000和1,0000都表示0,是同一个数!

补码

定点数的表示和运算_第14张图片
定点数的表示和运算_第15张图片

1.绝对值的和就是我们的模 2 负数+它的模=补数 例如-8的补数:12-8=4,即补数为4 验证:10-8=(10+4)%12=2 +9成为了-3的补数

定点数的表示和运算_第16张图片

负数的补数

定点数的表示和运算_第17张图片

正数的补数

定点数的表示和运算_第18张图片

负数的补数=负数+模
对于负数,如果它的符号位 不用 01表示,
那么模=2n,n表示数值位个数
如果负数的符号位 01表示
那么模=2n+1,n表示数值位个数,1为符号位

定点数的表示和运算_第19张图片
定点数的表示和运算_第20张图片
假设n为4,
最大值:1111,也就是24-1=15
最小值:10000,也就是24+1+(-24)=1,0000
【这个1可以当做符号位,代表负数,
也可以当做数值位,代表16。
总的说就是他可以表示一个最小的负数-16】


补码里面没有 -0
因为 -0:1,0000在我们补码里面不再是 -0,而表示-16

定点数的表示和运算_第21张图片

负小数的补码2的由来:
正小数的补码:0.0000
负小数的补码,符号位向前走一位:10.0000,所以2进制(10)=2

定点数的表示和运算_第22张图片

定点数的表示和运算_第23张图片
定点数的表示和运算_第24张图片

原码和补码相互转化:除符号位,按位取反,末尾+1

定点数的表示和运算_第25张图片

[y] ==> [-y]

定点数的表示和运算_第26张图片

定点数的表示和运算_第27张图片

反码

定点数的表示和运算_第28张图片

定点数的表示和运算_第29张图片
定点数的表示和运算_第30张图片

小结

定点数的表示和运算_第31张图片
定点数的表示和运算_第32张图片


补码和反码,机器数越大,对应的真值越大

定点数的表示和运算_第33张图片
定点数的表示和运算_第34张图片定点数的表示和运算_第35张图片

移码

移码是为了方便计算机比较两个正负数之间补码的大小关系
比如21的补码:0,10101
     - 21的补码:1,01011
单纯比较机器数,-21的补码>21的补码 这显然是不对的。

仔细观察发现,这两个正负数其实只要符号位互换,计算机就可以比较他们的大小了

定点数的表示和运算_第36张图片
定点数的表示和运算_第37张图片

正数的移码:符号位由0变1就行了
负数的移码:它的补码符号位取反
比如二进制:-10100
补码:1,01100
移码: 2^5^ -10100=0,01100

定点数的表示和运算_第38张图片
定点数的表示和运算_第39张图片

[X]<===>[X]:符号位取反!
定点数的表示和运算_第40张图片

移位运算

定点数的表示和运算_第41张图片

定点数的表示和运算_第42张图片


左移三位,丢掉左边的1,对应的真正就不准确了

定点数的表示和运算_第43张图片

左移三位,丢掉左边的1,对应的真正就不准确了

定点数的表示和运算_第44张图片

补码:
左移三位,丢掉左边的0,对应的真正就不准确了 因为补码是在原码的基础上按位取反+1得到的,丢掉1相当于是原码的0,不影响准确性

补码:
右移一位,丢掉右边的0,不影响结果,左边补1【补得是符号位】 右移两位,丢掉一个1,影响精度,左边填1【补得是符号位】

反码:
移掉0会影响结果
移调1,相当于原码的0,不影响结果

定点数的表示和运算_第45张图片
定点数的表示和运算_第46张图片

加减法运算

定点数的表示和运算_第47张图片
定点数的表示和运算_第48张图片
上图证明了:[A+B]==[A]+[B]

先求出A+B的值
再就出【A补+B补】的值
【A+B】的补码正好和【A补+B补】的值相等

这样,当计算机在求A+B时
可以先求【A+B】的补,也就是【A补+B补】的值 然后再通过补码转原码

定点数的表示和运算_第49张图片
定点数的表示和运算_第50张图片

[x]+[y]=0.1001+0.1011=1.0100
把1.0100向右移动一位:0.1010,也就是 10/16,再乘2,正好才是结果的20/16

溢出判断

定点数的表示和运算_第51张图片
定点数的表示和运算_第52张图片
定点数的表示和运算_第53张图片
定点数的表示和运算_第54张图片
定点数的表示和运算_第55张图片
定点数的表示和运算_第56张图片
定点数的表示和运算_第57张图片定点数的表示和运算_第58张图片

你可能感兴趣的:(计算机组成原理,c语言,哈希算法,散列表)