计算机组成原理01–二进制的加减法计算
必备知识
原码、反码、补码、符号位、最末位、溢出
原码:以二进制形式表示的所有的数
反码:
1.正数的反码等于正数的原码
2.负数的反码等于负数的原码取反【符号位不变】
补码:
1.正数的补码等于正数的原码
2.负数的补码等于负数的反码基础上最末位加1
符号位:最高位
最末位:最低位
溢出:计算的结果位数比参与运算的位数多,多出来的位数舍去
加法与减法
加法类型:
1.正数+正数=正数
2.负数+负数=负数【溢出】
3.正数+负数=正数【溢出】
4.正数+负数=负数
减法类型:
5.正数-正数=正数
6.正数-正数=负数
7.负数-负数=正数【溢出】
8.负数-负数=负数
9.正数-负数=正数
运算分析
1.以原码表示数字,以补码参与运算
2.最后的补码结果要转换为原码表示
3.加减法互逆,减法就是加法的变式
4.负号负号得正号,正号正号得正号
5.1+1=10,0+0=0,1+0=1,0+1=1
6.一正数减一负数等于一正数加上一负数的相反数
7.一负数减一负数等于一负数加上另一负数的相反数
举例
3
原码:0000,0011
反码:0000,0011
补码:0000,0011
-3
原码:1000,0011
反码:1111,1100
补码:1111,1101
2
原码:0000,0010
反码:0000,0010
补码:0000,0010
-2
原码:1000,0010
反码:1111,1101
补码:1111,1110
1
原码:0000,0001
反码:0000,0001
补码:0000,0001
-1
原码:1000,0001
反码:1111,1110
补码:1111,1111
1.正数+正数=正数
例一:1+2=3
1【补码】:0000,0001
2【补码】:0000,0010
3【补码】:0000,0011
3【补码】0000,0011–>3【反码】0000,0011–>3【原码】0000,0011
2.负数+负数=负数【溢出】
例二:(-1)+(-2)=(-3)
-1【补码】:1111,1111
-2【补码】:1111,1110
-3【补码】:1,1111,1101
-3【补码】最高位的1为溢出位所以舍去,故-3【补码】:1111,1101
-3【补码】1111,1101–>-3[反码]1111,1100–>-3[原码]1000,0011
3.正数+负数=正数【溢出】
例三:2+(-1)=1
2 【补码】:0000,0010
-1【补码】:1111,1111
1 【补码】:1,0000,0001
1【补码】最高位的1为溢出位所以舍去,故1【补码】:0000,0001
1【补码】0000,0001->1【反码】0000,0001->1【原码】0000,0001
4.正数+负数=负数
例四:1+(-2)=(-1)
1 【补码】:0000,0001
-2【补码】:1111,1110
-1【补码】:1111,1111
-1【补码】1111,1111–>-1[反码]1111,1110–>-1[原码]1000,0001
5.正数-正数=正数【溢出】
例五:2-1=1<==>2+(-1)=1
2【补码】:0000,0010
-1【补码】:1111,1111
1【补码】:1,0000,0001
1【补码】最高位的1为溢出位所以舍去,故1【补码】:0000,0001
1【补码】0000,0001->1【反码】0000,0001->1【原码】0000,0001
6.正数-正数=负数
例六:1-2=-1<==>1+(-2)=(-1)
1 【补码】:0000,0001
-2【补码】:1111,1110
-1【补码】:1111,1111
-1【补码】1111,1111–>-1[反码]1111,1110–>-1[原码]1000,0001
7.负数-负数=正数【溢出】
例七:(-1)-(-2)=1<==>(-1)+2=1
-1【补码】:1111,1111
2 【补码】:0000,0010
1 【补码】:1,0000,0001
1【补码】最高位的1为溢出位所以舍去,故1【补码】:0000,0001
1【补码】0000,0001->1【反码】0000,0001->1【原码】0000,0001
8.负数-负数=负数
例八:(-2)-(-1)=(-1)<==>(-2)+1=(-1)
-2【补码】:1111,1110
1 【补码】:0000,0001
-1【补码】:1111,1111
-1【补码】1111,1111–>-1[反码]1111,1110–>-1[原码]1000,0001
9.正数-负数=正数
例九:2-(-1)=3<==>2+1=3
2【补码】:0000,0010
1【补码】:0000,0001
3【补码】:0000,0011
3【补码】0000,0011->3【反码】0000,0011->3【原码】0000,0011