计算机进制加减

上课老师讲课没能完全了解计算机的二进制 补码的 加减法 怎么算? 举个例子 或者弄个公式 给我参考 参考。。。 最好是能够讲解一下 非常感谢。

二进制数与十进制数一样,同样可以进行加、减、乘、除四则运算。其算法规则如下:
加运算:0+0=0,0+1=1,1+0=1,1+1=10,#逢2进1;
减运算:1-1=0,1-0=1,0-0=0,0-1=1,#向高位借1当2;
乘运算:0×0=0,0×1=0,1×0=0,1×1=1,#只有同时为“1”时结果才为“1”;
除运算:二进制数只有两个数(0,1),因此它的商是1或0。
1.加、减法运算示例
例如:求(1101)2+(1010)2之和;求(110000)2–(10111)2之差,这两个计算过程分别如下图(a)/(b)所示。
二进制数加、减法计算示例加法运算步骤
上图所示的加法运算步骤如下:
(1)首先是最右数码位相加。这里加数和被加数的最后一位分别为“0”和“1”,根据加法原则可以知道,相加后为“1”。
(2)再进行倒数第二位相加。这里加数和被加数的倒数第二位都为“1”,根据加法原则可以知道,相加后为“(10)2”,此时把后面的“0”留下,而把第一位的“1”向高一位进“1”。
(3)再进行倒数第三位相加。这里加数和被加数的倒数第二位都为“0”,根据加法原则可以知道,本来结果应为“0”,但倒数第二位已向这位进“1”了,相当于要加“被加数”、“加数”和“进位”这三个数的这个数码位,所以结果应为0+1=1。
(4)最后最高位相加。这里加数和被加数的最高位都为“1”,根据加法原则可以知道,相加后为“(10)2”。一位只能有一个数字,所以需要再向前进“1”,本身位留下“0”,这样该位相加后就得到“0”,而新的最高位为“1”。
通过以上运算,可以得到(1101)2+(1010)2=10101。
减法运算步骤
上图所示的减法运算,在此专门解释一下。图中的“借位”行中某些位上方有标有“1”,表示该位被借数。具体过程为从被减数的右边第一位开始减去减数,这与十进制数的减法运算一样。在本例中,最低为“0”,由于0减去1,“0”比“1”小,而需要向右数第二位借位,而这里的第二位也为“0”,不够借转,需要继续而向右数第三位,以此类推,最后从右数第五位借得“1”。 下面是具体的去处过程:
(1)首先最后一位向倒数第二位借“1”,相当于得到了(10)2,也就是相当于十进制数中的“2”,用2减去1得1。
(2)再计算倒数第二位,因为该位同样为“0”,不及减数“1”大,需要继续向倒数第三位借“1”(同样是借“1”当“2”),但因为它在上一步中已借给了最后一位“1”(此时是真实的“1”),则倒数第二位目前为1,与减数“1”相减后得到“0”。
(3)用同样的方法倒数第三位要向它们的上一位借“1”(同样是当“2”),但同样已向它的下一位(倒数第二位)借给“1”(此时也是真实的“1”),所以最终得值也为“0”。
(4)被减数的倒数第四位尽管与前面的几位一样,也为“0”,但它所对应的减数倒数第四位却为“0”,而不是前面几位中对应的“1”,它向它的高位(倒数第五位)借“1”(相当于“2”)后,在借给了倒数第四位“1”(真实的“1”)后,仍有“1”余,1–0=1,所以该位结果为“1”。
(5)被减数的倒数第五位原来为“1”,但它借给了倒数第四位,所以最后为“0”,而此时减数的倒数第五位却为“1”,这样被减数需要继续向它的高位(倒数第六位)借“1”(相当于“2”),2–1=1。
(6)被减数的最后一位本来为“1”,可是借给倒数第五位后就为“0”了,而减数没有这个位,这样结果也就是被减数的相应位值大小,此处为“0”。
这样(110000)2–(10111)2最终的结果应该是:011001,最高位的“0”可以舍掉,就得到了11001这个结果。
在二进制数的加、减法运算中一定要联系上十进制数的加、减法运算方法,其实它们的道理是一样的,也是一一对应的。在十进制数的加法中,进“1”仍就当“1”,在二进制数中也是进“1”当“1”。在十进制数减法中我们向高位借“1”当“10”,在二进制数中就是借“1”当“2”。而被借的数仍然只是减少了“1”,这与十进制数一样。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-21
如果是补码运算则不存在符号与数值分开的问题.在补码运算时,把符号位也看成数值,一起参加运算,而且加法运算就一定是相加,减法运算就一定是相减,因此在计算机中对带符号的数进行加减时,最好使用补码.
  补码的运算规则是:X补+Y补=(X+Y)补
  设有两个数x和y,x=-89,y=+18,用补码表示如下
  x=10100111B (-89的补码)
  y=00010010B (+18的补码)
  若求x+y之和,可不用考虑两数的符号,直接相加,得出的和为x+y=11000111B(-71的补码),可见直接相加结果是正确的.
  (列出算式)
  若求x-y之差,也可以直接相减,即
  x=101001l1B (-89的补码)
  -y=00010010B (+18的补码)
  x-y=10010101B (-107的补码)
  可见直接相减结果也是正确的.
  若求y-x之差,同样也用减法,即
  y=00010010B (+18的补码)
  -x=10100111B (-89的补码)
  y-x=101101011B (+107的补码)
  也就是说做减法时,不论两数符号如何,其相减结果不论是数值还是符号都是正确的.
  在上述y-x算式中,最高位发生的进(借)位只是因为在字长为8位的计算机中,若运算结果并未超出补码的记数范围(-128~+127),这时的进(借)位被视为自然丢弃.计算机在运算中,这种自然丢弃并不影响结果的正确性.
  但要注意,如果字长为8位的计算机,其计算结果超过8位补码所允许的表示范围(即超出-128~+127),则其进位称之为溢出.溢出和自然丢弃是两种不同的概念.判别属于哪一种,则要看计算结果第7位与第8位的进位情况,如果第7位和第8位同时产生进位,即所谓双进位,则这种进位属于允许的自然丢弃.如果只有第7位或者只有第8位产生进位,即只有单进位,则这种进位属于溢出,溢出表示其数值超出计算机字长所能表示的范围,运算结果必然是错误的,因而也是不允许的.
  应当注意的是,溢出的概念主要是指带符号二进制数进行加减运算时可能产生的一种结果.对于无符号数,第8位不是符号位,只有第8位的进位才称为进位,而不采用溢出这个概念.
  对于无符号数的运算还应注意一点,当两个无符号数相减时,不允许用小的数去减大的数,因为小减大它的差一定是负数,无符号数的前提是没有符号,显然也不允许有负数,如果这样做,减的结果也必然是错误的.
相似回答