在计算机内部的1、0,并不是真正的数字,而是“机器码”。
它们是按照“补码”的规则,代表我们所说的数字。
在计算机中,并没有原码和反码,原码和反码,只能写在纸面上。
计算机中的补码,和纸面上的原码反码,没有任何关系。
================
计算机处理“机器码”的位数,是固定的,如8位机、16位机。。。
下面说明“补码”的构成。
数字 0,在八位机中,就是:0000 0000。
+1,就按二进制加上 1,即:0000 0001。
其他,依次递增即可。
最后的是+127,就加到了:0111 1111。
-------------
负数,依次递减,就行了。(注意,只取八位。)
-1,就是 0000 0000-1,按照二进制相减,
保留八位,即为:1111 1111=255(十进制)。
-2,就再减一,得:1111 1110=254。
其他,依次递减即可。
最后的是-128,即:1000 0000=128。
负数的计算公式:256 + 负数。
(其中的 256,是 2 的 8 次方。)
================
利用补码计算: 59-31 = 28。
计算机中,只有加法器,没有减法器。
必须用补码代替负数,用加法运算如下:
59 的补码=0011 1011
-31 的补码=1110 0001
-相加-------------
得: (1) 0001 1100 = 28 的补码
保留八位结果,这就实现了减法运算。
================
借助于补码,计算机,就可以省去减法器。
因为补码的这个特性,所以,在计算机中,只是使用补码存放数据。
而原码反码,在计算机中,都是不存在的。
================
注意:
如果运算结果超出了-128~+127 的范围,结果将是错的。
这种现象称为“溢出”。
再注意一下:进位,并不等于溢出。
C 语言是高级语言,不应涉及计算机内部的编码。
而且,在计算机中,数值,只补码表示和存储。
计算机中,并没有原码和反码。
所以,补码,和原码反码,都是没有任何关系的。
补码,只是和正负数值,有一一对应的关系。
对于数值 X,如果它小于零,它的补码就是:
[X]补 = 2^n + X, n 是二进制的位数。
如果是八位二进制,则有 2^8 = 256。
那么,有:
[-1]补 = 256-1 = 255 = 1111 1111(二进制);
[-2]补 = 256-2 = 254 = 1111 1110(二进制);
。。。
[-128]补 = 256-128 = 1000 0000(二进制)。
负数的补码,直接就可求出来,不需要用原码反码来转换。
正数的补码,本身就是,就更用不到原码反码了。
原码,补码,反码之间是什么关系啊?
原码、补码和反码是计算机中表示数值的基本方式,它们之间的关系可以通过以下公式进行计算:原码 = 反码 + 1 反码 = 补码 - 1 补码 = 2^n - 1,其中n为数值的位数 例如,假设我们要计算一个8位有符号整数的原码、补码和反码,则可以按照以下步骤进行计算:1. 将8位二进制数10000001转换为十进制...
原码反码和补码有什么区别?
正数的反码是其本身,负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。正数的补码就是其本身,负数的补码是在其原码的基础上符号位不变,其余各位取反, 最后+1(即在反码的基础上+1)。正数的原码,反码,补码都一样。原码(true form)是一种计算机中对数字的二进制定点表示方法。原码...
电脑中原码和补码是什么关系?
原码,反码,补码是机器存储一个具体数字的编码方式。原码跟补码之间的关系是:正数的补码与原码相同,负数的补码为 其原码除符号位外所有位取反(得到反码了),然后最低位加1。在计算机系统中,数值一律用补码来表示和存储。使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。原...
原码反码和补码有什么区别?
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值,如\\x0d\\x0a[+1]原 = 0000 0001\\x0d\\x0a[-1]原 = 1000 0001\\x0d\\x0a正数的反码是其本身\\x0d\\x0a负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.\\x0d\\x0a[+1] = [00000001]原 = [000...
原码,补码,反码的关系
1、一个正数,当用原码、反码、补码表示时,符号位都固定为0,用二进制表示的数位值都相同,即三种表示方法完全一样。2、一个负数,当用原码、反码、补码表示时,符号位都固定为1,用二进制表示的数位值都不相同,此时由原码表示法变成补码表示法的规则如下:(1)原码符号位为1不变,整数的每一位...
二进制正,负数的原码,反码,补码三者之间是什么关系
可以通过原码、反码和补码三者的含义及关系来介绍三者之间的换算关系:1、原码原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。比如如果是8位二进制:[+1]原=00000001[-1]原=10000001第一位是符号位。2、反码正数的反码是其本身负数的反码是在其原码的基础上,符号位不变,其余各...
正数的原码反码补码到底是不是一样的?
C语言里正数的原码反码补码是一样的。符号位是0,原码,反码,补码:00001010;补码是为负数想出来的办法,目的是减法可以用加补码的方法实现。补码可用反码加1得来,于是又有了负数的反码。计算机里有硬件“加法器”,有了补码,减法也可以用加法器做了。计算机里运算速度,硬件远快于软件,这是做出反码...
正数的补码,原码,反码,是什么关系?
正数的原码=反码=补码。例如8位字长,[+19]原=[+19]反=[+19]补=0001 0011b
原码、补码、反码之间是怎样转换的?
3、从原码到反码,如果该数为正数,也保持不变,如果首位是1,也就是说是负数,就将除了首位的1除外的所有数字取反。如下图所示。点击即可查看。4、如果想要把原码转换成补码,对正数来说,补码与原码相同,对负数来说,之间将反码加1就可以得到补码,计算示例如下图所示。当然,我们还可以将补码转换...
原码 补码 反码 之间有什么关系
注意: 0的补码是唯一的,为0000,0000 [+0]补=[-0]补=0000,0000 -0的反码为1111,1111 8bit表示数值时(-128)没有相对应的原码和反码, (-128) = (10000000)\/*由此可见:负数的最大值没有补码和原码,只有一个二进制表示,该二进制表示与真实值之间没有数学联系,所以知道一个数的补码,利用...