计算机中的补码和反码都是二进制吗,计算机中数值型数据二进制形式存储过程中的原码,反码与补码...
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
举个例子快速掌握吧
给一个数求补码
1、正整数的补码是其二进制表示,与原码相同
+9的补码是00001001,二进制表示也是00001001,原码:00001001
2、求负整数的补码,将其对应的二进制表示除了符号位的所有位取反后加1
求-5的补码。-5是负数,符号位是1,则对应-5的二进制表示也是原码(10000101)符号位不变,其余位取反加1→(11111011)。所以-5的补码是11111011。为,原码(true form)是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。则-5的原码即是其二进制表示。+11的原码为00001011,-11的原码就是10001011
补码求原码
已知一个数的补码,求原码的操作其实就是对该补码再求补码:
1如果补码的符号位为“0”,其原码就是补码。
2如果补码的符号位为“1”,符号位不变,其余位取反加1,那么求这个补码的补码就是要求的原码。
e.g.已知一个补码为11111001,则原码是10000111(-7)。
因为符号位为“1”,表示是一个负数,所以该位不变,仍为“1”。
其余七位1111001取反后为0000110;(注:反码的概念就是符号位不变,其余位取反就是反码)
再加1,所以是10000111。
已知补码求表示的数值
e.g.-65的补码是10111111
若直接将10111111转换成十进制,发现结果并不是-65,而是191。
事实上,在计算机内,如果是一个二进制数,其最左边的位是1,则我们可以判定它为负数,并且是用补码表示。
若要得到一个负二进制补码的数值,只需求对应的二进制表示即可,即只需求原码即可,只要对除符号位的其余位取反加1,就可算出其余位所表示的十进制数,将符号位变为负号-,加在这个十进制数前面即获得此数。
如:二进制值:10111111(-65的补码)
除符号位其余位取反:11000000
加1:11000001(-65)
+0与-0
首先正数的反码补码与原码相同
+0的原码:00000000
+0的反码:00000000
+0的补码:00000000
-0的原码:10000000
-0的反码:11111111(后面分析-0无反码)
-0的补码:00000000(补码规定0没有正负之分)
-128的原码:10000000
-128的反码:11111111
-128的补码:10000000
-0与-128有相同的反码,为减少歧义,-0没有反码。
综上所述:1.-128的补码和原码一样都是1000 0000,
2.0的原码、反码和补码都一样(即0000 0000)
3.如果把-0当做负数,1000 0000就会有歧义(事实上0的补码只有一个0000 0000)
补码的范围是[-2^(n-1),2^(n-1)-1]
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
