定点数与浮点数
定点数
定点数的表示
无符号数 : 没有符号位,全是数值位
有符号数 (原码,补码,反码,移码)
机器数 : 实际运算都是有符号数
正负值变成原码(机器数) , +换成0 ,- 换成1
原码缺点 :有符号数相加很麻烦,
需要引入减法,但是我们只有一个加法器
- 怎么才能只用一个加法,实现有符号数的相加呢 – 补码的概念!
有符号数是存在周期的概念的,这个周期就是模 ,取反+1的本质是 加上周期后的结果 和取反+1的结果是一样的
-
原码变到补码 : 负数符号位不变,数值位取反+1
∴补码是用来运算的 , 补码的运算结果 == 原码有符号数复杂的运算结果 -
补码到他的相反数 : 连着符号位取反+1
根据补码的表,我们就可以得到计算机内部使用的都是补码 +127 ~ -128
移码 : 在无符号数的基础上增加一个偏移值
使得大小变得更加直观
定点数的运算 : 小数是怎么存放的呢?
定点: 默认位置是小数点(隐含条件)
根据定点位置不同分为 定点小数 定点整数
移位运算
-
进制数:
左移相当于×进制数,移几位就乘几次进制数 (进制数^n) -
原码的移位运算
有符号数的移位:算术移位
符号位不移动,数值位移动,舍弃溢出的(会造成大小巨大改变)
无符号数的移位 是补零,舍弃溢出的
- 补码和反码
当是整数的时候 都补0
当时负数的时候
补码高位补1,低位补0
反码都补1
加减运算
-
原码的加减:
-15 + 14 = - |15-14|
由于原码的运算比较复杂,所以我们都是用补码进行运算的 -
补码的加减法
补码的加减法不需要考虑符号位,
如果补码是负数 : 快捷方法根据补码得到原码 :
最右边的1为边界,1左边的全部取反,符号位保持不变就得到了原码
溢出判断
8位数能表达的范围只有-128 ~ 127 (其中一位是符号位 2^7 = 128)
方法一: 一位符号位判断
一位符号位+数据位进位
数据位最高位向符号位进位 : C1
符号位向更高位进位 : Cs
只要C1和Cs不同,则一定溢出
双符号位 - 本质是模4补码 ⭐
双符号位的结果 第一位是本应得到的正确正负,第二位是实际得到的正负