Faith000000的博客

学无止境

计算机原理基础-原反补

为什么会需要原反补码

加法器计算机里面,只有加法器,没有减法器,所有的减法运算,都必须用加法进行。通过被减数的补码代替被减数,可以把减法转变为加法运算。

对补码的规定

正数的原反补码均不变。
对负数而言,把该数绝对值的补码按位取反,然后对整个数+1,即得该数的补码。

##############
## eg: 正数-正数
##############
    x=42
     =00101010
    y=21
     =00010101
    x-y
     =00101010-00010101
     =00101010+(11101010+1)
     =00101010+11101011
     =00010101
     =y
## 笔算:
     00101010
-    00010101
—————————————
     00010101

##############
## eg2: 正数-负数
##############
    x=42
     =00101010
    y=-21
     =11101011
    x-y
     =00101010-11101011
     =00101010+00010101
     =00111111
     =63
## 笔算:
     00101010
-    11101011
—————————————
     00111111

什么是模

一个负整数(或原码)与其补数(或补码)相加,和为模。
求负数补码可用另一方法:[x]补 =|x|+模
二进制下,有多少位数参加运算,模就是在 1 的后面加上多少个 0。
例如:8位二进制情况下,其模为 2^8=256=100000000
出现的进位就是模,此时的进位,就应该忽略不计。
补码就是按照这个要求来定义的:正数不变,负数即用模减去绝对值。
补码的方式也避免了0有两种表示方式。

模、补数在日常生活当中,可以看到很多这样的事情:
把某物体左转90度,和右转270度,在不考虑圈数的条件下,最终的效果是相同的;
把分针倒拨20分钟,和正拨40分钟,在不考虑时针的条件下,效果也是相同的;
把数字87,减去25,和加上75,在不考虑百位数的条件下,效果也是相同的;
…。
上述几组数字,有这样的关系:90+270=360、20+40=60、25+75=100式中的360、60和100,就是”模”(也可以理解成”进制”)。式中的90和270、20和40,以及25和75,就是一对对”互补”的数字。知道了”模”,求某个数字的”补数”,就是轻而易举的了:如果模为365,数字120的补数为:365-120=245。

补码的加减法依据

补码的加法运算所依据的基本关系为:
[x]补+ [y]补= [x+y]补
补码减法所依据的基本关系式:
[x-y]补 =[x+(-y)]补= [x]补+ [-y]补

数0的补码表示是唯一的。

[+0]补=[+0]反=[+0]原=00000000
[ -0]补=11111111+1=00000000

x位二进制数可以表示的二进制数范围

x位二进制数:原码是最高位为符号位,其他位表示此数的绝对值的二进制数值,反码是除了符号位的反码表示,补码是反码加1。
假设:
x为8,则原码范围是从01111111~10000000 ,即127~-128反码范围是01111111~100000000 (正数的反码和补码和原码相同),补码范围是01111111~11111111,关键数值点是-1、-127、-128。首先正数不管,因为反码原码补码都相同。看-1:原码10000001,反码11111110,补码是11111111;-127:原码11111111,反码10000000,补码是10000001;-128不能用正常的原码反码表示,但是可以这么想-128=-127-1,所以补码是10000001-1=10000000。所以范围是01111111~10000000,其他位数的表示范围算法也是一样的。


未完待续

阅读更多
个人分类: 计算机基础
上一篇weblogic.xml示例
下一篇Oracle之内存结构(SGA、PGA)
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭