计算机基础之原码反码补码

前言:学计算机的第一个接触的知识就是原码反码补码,不自觉得会认为这个很简单,但是现在让你算一个数的原码反码补码真的会吗?让你算两个补码之和会算吗?今天看计算机组成原理,书中又提到了这些知识,就顺便总结一下.

一 原反补码互相转换:
一个正整数,当用原码,反码,补码表示时,符号位都为0,用二进制表示的数位都相同,即三种表示方法一样.
一个负整数,当用原码,反码,补码表示时,符号位都固定为1,原码变为反码和补码的规则如下:
(1)原码符号位1不变,后面的每一位二进制数位求反得到反码.
(2)反码符号位为1不变,反码数值位最低位加1,得到补码.
举个栗子:
x=+122,y=-122,求[x]原,[x]反,[x]补,[y]原,[y]反,[y]补
先转化为二进制:[x]原=01111010,[x]反=01111010,[x]补=01111010(正整数三个一样)
[y]原=11111010,[y]反=10000101,[y]补=10000110

二 补码加法:
[x]补+[y]补 = [x+y]补(mod 2^(n+1))
举个栗子:
1.两个正整数相加
x=+1001,y=+0101,求x+y
[x]补=01001,[y]补=00101,[x+y]补=01110
所以x+y=+1110
2.一正一负相加:
x=+1001,y=-0101,求x+y
[x]补=01001,[y]补=10101,[x+y]补=(1)00110
因为要在模2^(n+1)意义下相加,所以把进的1去掉即
[x+y]补=00110,x+y=+0110

补码减法:(即加一个负数)
x=+1001,y=+0101,求x-y
[x]补=01001,[y]补=00101,[x-y]补=[x]补+[-y]补=(1)00111
同理把1舍去,得x-y=+0111

三 溢出概念
当我们算x=+1011,y=+1001,求x+y时
会得到先[x+y]补=10100,两个正数相加得到负数,显然不对,这种情况称为正溢
这个时候得解决方法是:
双符号位法,即把[x]补写为001100,[y]补=001000,这样得到得[x+y]补=010100
同理当两个负数相加,也会有可能产生负溢,解决方法负数补码前加11.

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章