在计算机中,小数和整数不一样,整数可以连续表示,但是小数是离散的,所以并不是每个十进制小数都可以用二进制来表示,但是相反,任意一个二进制小数都可以用十进制小数来表示。
0的原码表示有两种,正0和负0
技巧:由x的补码,快速求-x的补码。只需要符号位,数值位全部取反,然后末位+1
负数补码的判断规则,数值部分的值越小,其绝对值越大,也就是负的越多,注意是补码!!!
在计算机中,通常用来表示主存地址的是无符号数,因为地址都是正数,不需要符号位
补码和移码的1000 0000 表示-128 1既表示符号位,又表示数值位
在进行补码定点数的加减运算时,符号作为数的一部分参与运算
对负数反码进行算术移位,左移动低位补1,高位舍去,右移高位补1,低位舍去(记住是补1)
对负数补码进行算数移位的时候,
右移(同反码)高位补1,低位舍去
左移(同原码)地位补0,高位舍去
只有“正数+正数”才会上溢---正+正=负
只有“负数+负数”才会下溢---负+负=正
模4补码实际存储的时候只存储一个符号位,在计算的时候会复制一个符号位
模4补码最左边的两位表示符号位例如-3表示为11_101
00 表示正且无溢出 11表示负且无溢出 如果右边的那位与左边的那位不一样则表示溢出
模4补码具有模2补码的全部优点,并且易于判断加减运算中是否溢出
无符号数加法的判断溢出:最高位产生的进位=1时,发生溢出,否则没溢出
无符号数减法的溢出判断:最高位产生的进位=0时,发生溢出,否则没有溢出
补充部分
原码乘法的过程中符号位不参与运算,取两个数的绝对值进行相乘,然后符号位单独判断
补码加减运算器
https://blog.csdn.net/m0_55746113/article/details/128968010
补码乘除运算
https://zhuanlan.zhihu.com/p/546282702
如何判断溢出
1.正数左移变成负数,或者负数变成整数
2.正数加正数得到负数,负数加负数得到了正数,则发生了溢出
3.符号位和次高位的进位是否相同,如果不同则发生了溢出
4.双符号位,最高位和次高位不同就发生了溢出
CF:最高位进位 异或 sub位{sub=1减法,sub=0加法} 表示无符号数加减运算是否进位,借位CF=1表示有进位,借位
浮点数的加减法运算
![[浮点数的加减运算.png]]
大端存储和小端存储
https://blog.csdn.net/weixin_45633061/article/details/117421452
数据边界对齐存储
https://blog.csdn.net/qq_52698632/article/details/123963386
浮点数的规格化
对原码尾数,最高位一定要为1
原码正数0.1xxxx,最大能表示0.11111111 1-2^(-n),最小是0.10000 因为最高位一定为1
负数1.1xxxxx,最大1.1000000 -0.5 最小是1.111111 -(1-2^(-n))
对于补码来说
正数0.1xxxxx 最大就是0.111111 最小就是0.100000
负数1.0xxxxxx 小数点后的第一位一定要是0 最大是1.011111 -(0.5+2^(-n))
最小是1.00000000 -1
长度相同,格式相同的两种浮点数,前者基数大,后者的基数小,其他的规定均相同,则前者表示的数的范围更大但是精度更低
非规格化浮点数->阶码一定为0,用它来表示0或者非常接近0的数
在规格化的浮点数中,讲阶码部分的n位移码改为n位补码表示,浮点数的范围不变,位数相同,补码与移码表示的范围相同。移码范围-126-127(全0和全1有其他用途),补码的范围-128-127
只有浮点数需要舍入,定点数无舍入这个概念
浮点数发生舍入的情况有两种1.发生对阶的时候会发生舍入2.进行右规的时候会发生舍入
题目如果没说是IEEE754 则没有隐藏位1,切记
对阶的时候不会引起上溢或下溢,一开始的时候一般来说是小阶往大阶对齐,一般来说大阶已经是合法的,所以小阶向大阶的时候不会发生上溢。**但是在不同浮点数类型下会出现溢出,如果float向double对齐则可能发生溢出**
右规和尾数舍入都可能引起阶码上溢 0舍1入法的时候,如果是全1,舍去了最后一个1的话,就要加入1,然后就会变成10.00000然后又规的时候,就会出现上溢
左规的时候可能会引起阶码的下溢
非规格化的小数偏置值不是127**是126**
表示为 正负(0.xxxxx)*2^(-126)