计算机内部如何存储数据,关于源码、补码的问题!

1. 什么是源码,反码,补码?
2. 计算机内部存储的是源码 还是 反码 还是 补码??
3. 这样一个二进制数:00010010 这是表示正数还是负数?他的几??
请给一个比较权威正确的答案,如果你也不确定,就不要回答了,谢谢!

1.
补码
(1)正数的补码
  与原码相同。   【例1】+9的补码是00001001。(备注:这个+9的补码说的是用8位的2进制来表示补码的,补码表示方式很多,还有16位2进制补码表示形式,以及32位2进制补码表示形式等。)
(2)负数的补码
  符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。   同一个数字在不同的补码表示形式里头,是不同的。比方说-15的补码,在8位2进制里头是11110001,然而在16位2进制补码表示的情况下,就成了1111111111110001。在这篇补码概述里头涉及的补码转换默认了把一个数转换成8位2进制的补码形式,每一种补码表示形式都只能表示有限的数字。
原码
原码(true form)是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面 原码
增加了一位符号位(即最高位为符号位),该位为0表示正数或者0(当为0时第一位不能为1,因为如果把10000000也当成0会造成和-128原码冲突),该位为1表示负数,其余位表示数值的大小。
反码
所谓原码就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。   反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。   补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。

2.
(1)、在计算机系统中,数值一律用补码来表示(存储)。 主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补 码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。
(2)、补码与原码的转换过程几乎是相同的

3. 2.^4+2.^1 = 17 表示 17
谢谢 采纳

参考资料:http://baike.baidu.com/view/742694.htm

温馨提示:答案为网友推荐,仅供参考
第1个回答  2022-09-15

计算机内部如何存储数据,关于源码、补码的问题!

在计算机内部,使用二进制代码,存储各种信息。

用二进制代码,表示数值,它们的关系,十分简单。

远远没有他们所说的“原码反码符号位。。。”那么复杂。

就说八位机,每个数值,都是用八位二进制来存储。

数值 0,存在计算机中,就是:0000 0000。

数值 +1,存在计算机中,就是:0000 0001。

数值 +2,存在计算机中,就是:0000 0010。

。。。依次递增。。。

数值 +127,这就是:0111 1111。

---------------------

负数,那就从 0 依次递减。

数值 0,存在计算机中,还是:0000 0000。

数值-1,就是用 0 减去 1,即:0000 0000-1。

   用二进制相减,即可得:1111 1111。

   出现借位,自然丢弃。

数值-2,就再减一次一,可得:1111 1110。

数值-3,以此类推。。。就是:1111 1101。

。。。依次递减。。。

数值-128,慢慢减吧。最终是:1000 0000。

综上所述,十进制数值,与八位的补码,列表如下:


至此,就把数值与补码的关系,说明完毕。

补码,就是由二进制,递增、递减,自然而然形成的。

在此期间,原码反码符号位什么的,都没有用。

所以,补码,与这些垃圾,一丁点关系,都没有。

补码,并非是“原码取反加一”而来的。

在八位的原码中,也没有-128,拿什么取反加一!





第2个回答  2011-08-04
源码,反码,补码是计算机原理的术语。说白了就是为了理解计算机2进制用的。对于C/C++来说,是和数据类型有关的。整型(包括 char ,short, int, long)都是用补码方式表示有符号数的。
无符号数是使用源码方式表示的。float和double类型是使用阶码移码方式存储数据的。

计算机内部是2进制存储的,吧一个存储看作一定类型的数据,就对应着这种类型的计算。

如果没有类型作为依托,你的假设就不成立了,所以不能说它到底表示是几。
如果是整型类型,因为第一个位是0,所以不论有符合还是无符号,它都是一个正数;那么可以认为它表示十进制数字18
第3个回答  2011-08-10
1.数据分为有符号数和无符号数,无符号数都为正数,由十进制直接转换到二进制即可。而无符号数以首位地址来表示正负,正数的首位地址为0,其源码是由十进制数转换到的二进制数字,负数的首位地址为1,其源码后面的位也为10进制数转换过去的二进制数字。
但是计算内为了储存及运算方便,加入了反码和补码的定义,正数的反码和补码与源码一致,而负数的反码为除了首地址以外,所有的位都取反,因此得名反码,而补码是在反码的基础上,再补上一个1。
2. 因此,源码是为了便于我们自己观看和计算,而计算机内为了运算及存储的方便,存储的都是补码,反码是两者转换的中间过程。
3. 如00010010,最高位是0,所以不管其是有符号数还是无符号数,均为正数,后面7位看1的位置,第5位和第2位为1,因此为2^4+2^1=18.
如10010010(源码),如果是无符号数,那么为2^7+2^4+2^1=146;如果为有符号数,最高位为1,因此为负数,-(2^4+2^1)= -18. 源码10010010 反码11101101 在计算机储存的补码11101110。

参考资料:数字逻辑电路

第4个回答  2011-08-04
⒈原码:一个整数,按照绝对值大小转换成的二进制数,称为原码.
 反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码.
取反操作指:原为1,得0;原为0,得1.(1变0; 0变1)
 补码:反码加1称为补码.
也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码.
⒉在计算机内部是以补码的形式储存的。( 正数的最高位是符号位0,负数的最高位是符号位1。 对于正数:反码==补码==原码。 对于负数:反码==除符号位以外的各位取反。)
⒊二进制数:00010010表示十进制正整数18。
相似回答