运算方法和运算器

来源:互联网 发布:inpho软件中文说明 编辑:程序博客网 时间:2024/06/01 07:18

计算机中的数据分为:数值数据和非数值数据,数值数据有确定的值,有大小正负之分,能在数轴上找到它们的位置;非数值数据一般 用来表示符号或者文字,无值的含义。
编码格式

正数的原码,反码和补码都一样。
负数的原码:符号位为1,其余不变。
负数的反码:在其原码的基础上, 符号位不变,数值位取反。
负数的补码:是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)。
移码:不管正负数,只要将其补码的符号位取反即可。

例如:X=-101011 , [X]原= 10101011 ,[X]反=11010100,[X]补=11010101,[X]移=01010101

例:0000 0001的真值 = +000 0001 = +1
1000 0001的真值 = –000 0001 = –1
[+1]原 = 0000 0001
[-1]原 = 1000 0001
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补

同余的概念
两个整数a,b,若它们除以整数m所得的余数相等,则称a,b对于模m同余
记作 a ≡ b (mod m)
读作 a 与 b 关于模 m 同余。
4 mod 12 = 4
16 mod 12 = 4
28 mod 12 = 4

同余的两个数具有互补关系。例如-8和4对模12是同余的。

补码加法:[X+Y]补=[X]补+[Y]补
补码减法:[X-Y]补=[X]补+[-Y]补,[-Y]补={[Y]补]变补
注意 一个数的补码与变补是不同的,对于正数补码与原码相同,对于负数,原码变成补码时,符号位不变,数值各位取反末尾加1.而变补不论这个数是正数还是负数,连同符号位全部取反末尾加1.
如果[Y]补表示的是正数,则变补后就是负数。

补码运算规则:
1、参与运算的两个数都是补码表示
2、符号位作为数的一部分参与运算
3、若加法,直接相加,若减法,则将减数变补后再与被减数相加
4、运算结果仍用补码
5、符号位进位为模制,应该去掉

例如:[X]补=00110110 [Y]补=11001101 求:[X+Y]补、[X-Y]补

这里写图片描述

补码溢出:
两个正数相加,其运算结果大于机器所能表示的最大正数,称为正溢。
两个负数相加,运算结果小于机器所能表示的最小负数,称为负溢。
一旦溢出,溢出的部分将丢失,留下来的结果不正确。

这里写图片描述

这里写图片描述

溢出的检测方法
(1)单符号法
当两个操作数同号时,而其和的符号与操作数的符号不一致则就发出溢出,公式表示如下:
溢出=XsYs(非Ss)+(非XsYs)Ss
注意:
a、若是同号相减或异号相加,则运算结果不可能溢出;
b、若是同号相加或异号相减,则运算结果可能溢出。

(2)采用最高有效位的进位判断

符号位产生的进位与最高有效位产生的进位情况不同,则溢出。

(3)采用变形补码判断(双符号位)

原创粉丝点击