2-数组表示和运算
码制
十进制转换任意进制
除基取余法(针对整数)
拿十进制的数除以基数(什么进制就是什么基数),留下余数和商,继续执行除基取余,知道商为0,最后将余数从下向上串起来,得到整数部分。
乘基取整法(针对小数)
拿小数不断乘以基数,取掉最高位(小数点前一位),知道乘积的结果为1.000....,将结果从下向上串起来即可。
原码
机器数的最高位表示数据的符号,剩下的数据位表示数据的绝对值真值。假设字长为n+1位。 则小数表示范围:, 整数表示范围:。 其中原码的0有两种表示:10000和00000。
补码
基于原码的不方便运算二设计的,模二运算。正数的补码和原码一样,负数的补码是在原码的基础上,除符号位外取反,末位加1(从右到左找到第一个1,前面的数取反即可)。如果是从x的补码求-x的补码,也是上述的步骤,同时将符号位进行变换即可。 对于字长n+1位。 小数表示范围: 整数表示范围: 零的表示唯一,都是0.000
反码
正数的反码同原码,负数的反码等于原码的数值为全部取反。其中反码的零也有正负之分。
移码
移码常常用来表示浮点数的阶码,理解为在真值上加上一个常数(偏置值),通常是,相当于x在数轴上正向偏移若干单位,移码等于补码的符号位取反。 移码的零表示唯一。
移位
算术移位
码制 | 添加 | |
---|---|---|
正数 | 原、补、反 | 0 |
负数 | 原 | 0 |
补 | 左1 | |
右0 | ||
反 | 1 |
逻辑移位
无脑0
循环移位
定点数加减
运算步骤
原码加减计算在计算机中容易失误得不到正确的结果,于是计算机内部的加减运算都是采用补码进行运算的,减法的本质是加法,等于加上一个负数的补码。步骤:
- 按二进制规则,逢二进一
- 加法:直接相加;减法:减数转换成负数补码后和被减数相加
- 符号位和数值位一起参与运算,加减法的符号位在运算中直接得到
- 最终运算结果的高位丢弃,保留n+1位,运算结果还是补码
四个标志
- 零标志ZF,ZF为1代表全0
- 溢出标志OF,为1表示溢出,对于无符号数这个标志没用
- 符号标志SF,表示结果的符号
- 进/借位标志CF,对无符号有用,有符号数的运算没用
溢出判别
1)一位符号位 参加运算的两个数符号相同,结果与原操作数不同的话,表示溢出。 逻辑表达式为1时候为溢出
2)双符号位 模四补码,运算结果两个符号位一样则不溢出,否则是溢出。
- 00
- 11
- 01上溢出
- 10下溢出
3)一位符号位 采用一位符号位结合仅为情况判断溢出,若符号位进位CF和最高位数位的进位C1一样表示没有溢出,反之溢出。
定点数乘除
原码乘法
- 符号位单独运算,被乘数和乘数按绝对值进行运算
- 初始ACC里面设置为00.0000(00符号位隐藏)
- 乘数最低位为1,则加上被乘数,为0则加0
- 执行完3后,整体带上ACC的符号位进行右移(逻辑)
- 重复执行加法和右移n次即可
手算模拟:
补码乘法(booth算法)
在乘数后面初始加一个辅助位0,根据辅助位和乘数的最后一位的加减结果判断下一步加什么。
- x和y计算出对应的x和y的补码以及-x的补码
- 初始ACC设置00.0000,MQ中为乘数,乘数后添加一个辅助位(辅助位就是MQ后一位)
- 辅助位-MQ最低位:为1则加x的补码,为0则加0,为-1则加-x的补码
- 执行3后,整体右移(逻辑)一位
- 整体执行3和4共n次,最后再执行一次3,但是不右移(也就是n+1次累加和n次的右移)
比较:
原码除法(恢复余数)
- 符号位单独运算
- 计算x、y的绝对值,y的补码和-y的补码
- **第一步是用被除数-除数的补码 **
- 判断余数,余数为负商0,并且加上除数的补码,余数为正商0,不恢复
- 执行完4后,余数进行 逻辑左移
- 加减n+1次,左移n次
流程图:
原码除法(加减交替发,不恢复余数法)
由余数和除数的符号共同决定,不需要恢复余数。
- 符号位单独运算
- 计算x、y的绝对值,y的补码和-y的补码
- 被除数减去除数,判断余数正负
- 余数为负,商0,余数左移并且加上除数;余数为正,商1,余数左移并且减去除数
- 加减n+1次,左移n
补码除法(加减交替法)
- 符号位参与运算
- 计算x、y的绝对值,y的补码和-y的补码
- 第一步:被除数和除数同号,则被除数减去除数,被除数和除数异号,则加上除数
- 判断除数和余数是否同号,同号商1,余数左移减去除数;异号商0,余数左移加上除数
- 执行4操作n次,最后一步恒置1,“末位恒置1”
浮点数
浮点数的表示格式
表示为: S的取值决定正负;M表示尾数,R是基数(2,4,8...),E是阶码,表示
规格化
- 正数:0.1xxxxx
- 负数:1.1xxxxx
- 对于基数为2的,要求小数点后一位不全为0, 也就是要为1
- 对于基数为4的,要求小数点后两位不全为0
策略:
- 左规:尾数左移,则阶码要-1
- 右规:尾数右移,阶码+1
IEEE754标准
小概念
符号位:1;阶码:8;尾数:23 其中尾数前面隐含了一个1.,所以尾数的精度是24,能表示24位有效数字
符号S(31) | 阶码E(23~30) | 尾数M(0~22) |
---|
1+8+23组合。IEEE754标准表示成浮点数真值为: 其中注意阶码E是移码表示的。 阶码的全0和全1:
阶码 | 符号 | 尾数 | 值 |
---|---|---|---|
全0 | 0 | 0 | 0 |
全0 | 1 | 0 | -0 |
全1 | 0 | 0 | 正无穷 |
全1 | 1 | 0 | 负无穷 |
浮点数的加减运算
给定两个数,先转化成二进制表示形式。
- 对阶,两阶码相减,小的向大的对齐,阶码对齐过程中尾数也会进行移动