机器数运算
一、加法
-
对于无符号数:类似十进制加法
逢2进1,最高位进位舍去。 -
对于有符号定点数:运用补码运算可以直接带符号位运算
原码转换为补码的方法:除符号位,也就是数值位按位取反,末位加1。手算时可以从后向前找到第一个1,然后将该1之前的所有数值位取反: **逢2进1,最高位进位舍去。** 原码与补码的转换:正数的反码、补码与原码一致 有原码101010 按位取反变为反码:110101(符号位不变) 接着末位加1变为补码:110110 可以发现补码倒数第一个1之前部分1101与反码的前段一致,而后部与原码一致(10)因此可以通过此规律快速从原码转换为补码,反过来补码转换为原码也是一样操作。
二、减法
在计算机中一般将其转化为加法:
-
对于无符号数:
1.被减数不变,减数**全部位**按位取反,末位加1。 2.做加法 例如:11001110-10101001 1.将10101001按位取反,变为:01010110;末位加1:01010111 2.做加法:11001110 +01010111 =00100101 3.验证一下:11001110(206)-10101001(169)=00100101(37) -
对于有符号定点数:
通常使用补码运算,同样也是将减法转换为加法:[x]补-[y]补=[x]补+[-y]补 步骤: 1.被减数不变,减数**全部位**按位取反,末位加1。这一步是将[y]补 转为 [-y]补 2.做加法 例如:11001110-10101001(补码) 1.将10101001按位取反,变为:01010110;末位加1:01010111 2.做加法:11001110 +01010111 =00100101 3.验证一下:11001110(-50)-10101001(-87)=00100101(37)
总结:可以发现有符号定点数的补码加减法与无符号数操作一致
-
溢出的判断 :
对于有符号数,有两种判断方式: 1.用双符号位补码,也就是将0,1101101表示成00,1101101。 这样在运算是若符号位一致则未发生溢出,若不一致则发生溢出。 01:表示正溢出,也即是超出最大正数表示范围。 10:表示负溢出,即超出最小表示范围。 2.第二种方法是将最高位进位与次高位进位异或运算,也就是OF标志位计算方式: 异或运算:1⊕0=1;0⊕1=1;1⊕1=0;0⊕0=0; 结果为1,则表示发生溢出。反之,则没有。
三、乘法
乘法可以分解为加法与移位操作,因此先了解一下移位运算:
1.算术移位:
原反补的算数移位符号位不变仅移动数值位;
(1) 原码的算数移位:左移右移都补零;1,010 右移1位-->1,001
(2) 反码的算数移位:正数时与原码一致;负数时,补1
(3) 补码的算术移位:正数时与原码一致;负数时,右移补1,左移补0。可以用左移补0,右移补符号位来记忆。
2.逻辑移位
整体移位,补0
原码一位乘法


浙公网安备 33010602011771号