为什么整数在内存中用补码表示,而不用原码反码补码转换工具和反码

为什么计算机用补码存储数据?
我的图书馆
为什么计算机用补码存储数据?
在计算机内部,所有信息都是用二进制数串的形式表示的。整数通常都有正负之分,计算机中的整数分为无符号的和带符号的。无符号的整数用来表示和正整数,带符号的证书可以表示所有的整数。由于计算机中符号和数字一样,都必须用二进制数串来表示,因此,正负号也必须用、来表示。通常我们用最高的有效位来表示数的符号(当用位来表示一个整数时,第位即为最高有效位,当用位来表示一个整数时,第位即为最高有效位。)表示正号、表示负号,这种正负号数字化的机内表示形式就称为“机器数”,而相应的机器外部用正负号表示的数称为“真值”。将一个真值表示成二进制字串的机器数的过程就称为编码。
无符号数没有原码、反码和补码一说。只有带符号数才存在不同的编码方式。
带符号整数有原码、反码、补码等几种编码方式。原码即直接将真值转换为其相应的二进制形式,而反码和补码是对原码进行某种转换编码方式。正整数的原码、反码和补码都一样,负数的反码是对原码的除符号位外的其他位进行取反后的结果(取反即如果该位为则变为,而该位为则变为的操作)。而补码是先求原码的反码,然后在反码的末尾位加后得到的结果,即补码是反码。中带符号整数都采用补码形式表示。(注意,只是带符号的整数采用补码存储表示的,浮点数另有其存储方式。)
采用补码的原因或好处如下,采用补码运算具有如下两个特征:
)因为使用补码可以将符号位和其他位统一处理,同时,减法也可以按加法来处理,即如果是补码表示的数,不管是加减法都直接用加法运算即可实现。
)两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。
这样的运算有两个好处:
)使符号位能与有效值部分一起参加运算,从而简化运算规则。从而可以简化运算器的结构,提高运算速度;(减法运算可以用加法运算表示出来。)
)加法运算比减法运算更易于实现。使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计。
( 1 )10 - ( 1 ) 10= ( 1 ) 10+ ( -1 ) 10= ( 0 )10
( 1 )10 - ( 2)10 = ( 1 )10 + ( -2 )10 = ( -1 )10
( 1 ) 10- ( 2) 10= ( 1 )10 + ( -2 )10 = ( -1 )10
10(MOD 12)
A&&&& (MOD& M)
一、八位表示的范围:【有符号整数只能由其补码表示】-128 --- -1 或 -
0 ---- 127& 或 -
注意:0的机器码只有唯一的一种表示(编码),即;没有-0这种说法,不是-1的编码,而是-128的编码&;另外没有补码和反码。
有真值(一般为十进制有符号整数)到机器码的转换过程称为编码。
三、计算机采用补码表示的原因
)使符号位能与有效值部分一起参加运算,从而简化运算规则。从而可以简化运算器的结构,提高运算速度;(减法运算可以用加法运算表示出来。)
)加法运算比减法运算更易于实现。使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计。【从补码运算的特征理解!】
3)为了防止
TA的最新馆藏[转]&[转]&[转]&[转]&[转]&                 计算机中带符号的整数为何采用二进制的补码进行存储?
  我们都知道在计算机内部数据的存储和运算都采用二进制,是因为计算机是由很多晶体管组成的,而晶体管只有2种状态,恰好可以用二进制的0和1表示,并且采用二进制可以使得计算机内部的运算规则简单,稳定性高。在计算机中存在实数和整数,而整数又分为无符号整数和有符号整数,无符号的整数表示很简单,直接采用其二进制形式表示即可,而对于有符号数的表示却成了问题,如何表示正负?如何去处理正负号?下面来具体说下其中的原因,在这之前先了解一下原码、反码和补码这几个概念。
1.原码、反码和补码的概念
  在了解原码、反码和补码之前先说一下有符号数和无符号数。用过C语言的都知道在C语言中用signed和unsigned来标识一个数是否是有符号还是无符号类型的。对于一个8bit的二进制来说,若当做无符号数处理,其能表示的整型值范围是0~255,但是这样表示数据就有个局限性,如果数据是负的该如何表示?因此就引入了有符号类型的概念,对于有符号类型,规定取最高位为符号位,若最高位为0,则为正数,否则为负数,这样一来对于8位二进制,示数值的就只有7位了,能够表示的非负数值范围变为0~127,负值范围为-127~-1,相当于可以理解为将无符号类型能够表示的128~255拿来去表示-127~-1了。事实上,在计算机内部存储中,计算机自己是无法去区分无符号还是有符号类型的,对于255和-1,在计算机内部存储的都是。换个角度来说,如果事先知道内存中存储了这样一个8位二进制,但是谁也不能肯定它具体表示什么数值,是-1还是255?这个是需要靠程序员自己去指定的,如果指定为无符号类型,则编译器则通过相应指令将其转换为数值255。事实上对于-x的二进制补码表示形式和(256-x)(256-x当做无符号类型处理)的二进制表示形式相同,从这里可以略微了解了补码的含义了。在教材中对于原码、反码以及补码一般是这么定义的:
  对于正数原码、反码以及补码是其本身。负数的原码是其本身,反码是对原码除符号位之外的各位取反,补码则是反码加1。
  因为(-x)的二进制补码形式和256-x的二进制表示形式相同,而255-x相当于对x的每一位取反,那么256-x就是255-x后加1。
  注意:1)原码、反码、补码的概念是针对有符号类型而言的。
     2)实数始终是有符号类型的(实数并不是采用补码形式存储的,具体可参考《》一文),整型数据包括无符号和有符号类型的。
2.采用补码表示带符号的整数的原因
  对于有符号类型的整数,有原码、反码和补码三种形式,最后选择了补码来表示,具体来说有下面几点原因。
  1)能够统一+0和-0的表示
  采用原码表示,+0的二进制表示形式为0 000 0000,而-0的二进制表示形式为1 000 0000;
  采用反码表示,+0的二进制表示形式为0 000 0000,而-0的二进制表示形式为1 111 1111;
  采用补码表示,+0的二进制表示形式为0 000 0000,而-0的二进制表示形式为1 111
,因为计算机会进行截断,只取低8位,所以-0的补码表示形式为。
  从上面可以看出只有用补码表示,+0和-0的表示形式才一致。正因为如此,所以补码的表示范围比原码和反码表示的范围都要大,用补码能够表示的范围为-128~127,0~127分别用11111来表示,而-127~-1则用11111来表示,多出的则用来表示-128。因此对于任何一个n位的二进制,假若表示带符号的整数,其表示范围为-2^(n-1)~2^(n-1)-1,且有MAX+1=MIN。看下面一段代码:
char ch=127;
  ch的值是多少?它的值是-128,读者可以上机验证一下。
  假如不采用补码来表示,那么计算机中需要对+0和-0区别对待,显然这个对于设计来说要增加难度,而且不符合运算规则。
  2)对于有符号整数的运算能够把符号位同数值位为一起处理
  由于将最高位作为符号位处理,不具有实际的数值意义,那么如何在进行运算时处理这个符号位?如果单独把符号位进行处理,显然又会增加电子器件的设计难度和CPU指令设计的难度,但是采用补码能够很好地解决这个问题。下面举例说明:
  比如-2+3=1
  如果采用原码表示(把符号位同数值位一起处理):
0101=(-5)原,显然这个结果是错误的。
  如果采用反码表示
0 0000=(+0)反,显然这个结果也是错误的。
  如果采用补码表示
0 01=(1)补,结果是正确的。
  从上面可以看出,当把符号位同数值位一起进行处理时,只有补码的运算才是正确的。如果不把符号位和数值位一起处理,会给CPU指令的设计带来很大的困难,如果把符号位单独考虑的话,CPU指令还要特意对最高位进行判断,这个对于计算机的最底层实现来说是很困难的。
  3)能够简化运算规则
  对于-2+3=1这个例子来说,可以看作是3-2=1,也即[3]+[-2]=1,从上面的运算过程可知采用补码运算相当于是
  [3]补+[-2]补=[1]补,也即可以把减法运算转换为加法运算。这样一来的好处是在设计电子器件时,只需要设计加法器即可,不需要单独再设计减法器。
  总的来说,采用补码主要有以上几点好处,从而使得计算机从硬件设计上更加简单以及简化CPU指令的设计。
#include&stdio.h&
int main(void)
char ch=-1;
char *p=(char *)&
unsigned char uch=*p;
printf("%d\n",uch);
//输出结果为255
阅读(...) 评论()扫二维码下载作业帮
1.75亿学生的选择
下载作业帮安装包
扫二维码下载作业帮
1.75亿学生的选择
计算机中,为什么负整数用补码表示而不直接用原码,例如-5在计算机中是而不是有什么特别的用处吗
鸽子最纯2B14d
扫二维码下载作业帮
1.75亿学生的选择
(1)采用补码表示法,加法减法的运算逻辑对正负数都一样了,CPU内部的电路结构简单了很多.如采用原码表示法,则必须先求出绝对值,根据符号的不同分别采用相加或相减.运算器电路结构大大复杂化.(2)采用补码表示法,连续的加减法中间结果即使发生了溢出,只要最后结果不溢出,结果就一定正确.即使最后一步仍然溢出,常常也可以通过变换类型使其结果正确.不采用补码表示法,只要中间有一步溢出,就不能保证结果正确.
为您推荐:
其他类似问题
扫描下载二维码

我要回帖

更多关于 原码 反码 补码 移码 的文章

 

随机推荐