二进制补码反码原码(二进制反码补码原码怎么转换)
二进制的原码、补码、反码详解
计算机中,并没有原码和反码,只是使用补码,代表正负数。
使用补码的意义:可以把减法或负数,转换为加法运算。从而简化计算机的硬件。
------------
比如钟表,时针转一圈,周期是 12 小时。
倒拨 3 小时,可以用正拨 9 小时代替。
9,就称为-3 的补数。
计算方法:12-3 = 9。
对于分针,倒拨 X 分,就可以用正拨 60-X 代替。
------------
如果,限定了两位十进制数 (0~99),周期就是 100。
那么,减一,就可以用 +99 代替。
24-1 = 23
24 + 99 = (1) 23
忽略进位,只取两位数,这两种算法,结果就是相同的。
于是,99 就是 -1 的补数。
其它负数的补数,大家可以自己求!
求出了负数的补数,就可用加法,代替减法了。
------------
计算机中使用二进制,补数,就改称为【补码】。
常用的八位二进制是:0000 0000~1111 1111。
它们代表了十进制:0~255,周期就是 256。
那么,-1,就可以用 255 = 1111 1111 代替。
所以:-1 的补码,就是 1111 1111 = 255。
同理:-2 的补码,就是 1111 1110 = 254。
继续:-3 的补码,就是 1111 1101 = 253。
。。。
最后:-128,补码是 1000 0000 = 128。
计算公式:负数的补码=256+这个负数。
正数,直接运算即可,不需要求补码。
也可以说,正数本身就是补码。
------------
补码的应用如: 7-3 = 4。
用补码的计算过程如下:
7 的补码=0000 0111
-3的补码=1111 1101
--相加-------------
得:(1) 0000 0100 = 4 的补码
舍弃进位,只保留八位,作为结果即可。
这就是:使用补码,加法就代替了减法。
所以,在计算机中,有一个加法器,就够用了。
原码和反码,都没有这种功能。
------------
原码和反码,毫无用处。计算机中,根本就没有它们。
什么是补码,如何转换反码、补码、原码?
反码补码原码怎么转换,来看看方法吧。
1、首先原始代码的最高位是符号位,0表示正,1表示负,中间值表示数字的绝对值。
2、符号的反转,正数符号的反转与原符号相同,负数的补数是该符号的最低有效位数加上1。
3、补数,正数的补数与原代码相同,负数的补数在其倒数第一的基础上加1。零分为+0和-0。 进行不同符号的加法或同一符号的减法时,不能直接进行加法或减法,不能直接给出正负的结果。
4、必须先取绝对值,然后再加上减法。 符号比特由较大的绝对值决定,因此出现了转码。 反码是对原始代码的改进。补码在针对加减运算和正负零的问题上都解决了,平时用的最多的也就是补码。
二进制反码,补码,原码的概念以及表示法
补码、原码、反码,这些都是计算机专家编造的词汇。
事实上,它们,都不应该存在。
计算机的运算,是很简单的,和这些词汇,并没有任何关系。
--------------------------
你想象一下:
有一个小朋友,很小的,大概是三岁吧。
他只会数一百个数(0~99),会加法,还不会做减法。
那么,你可以这样教他:加 99,就是减一。
比如: 25 - 1 = 24
25 + 99 = (一百) 24
让他只取 2 位数,忽略进位,结果,就是正确的。
--------------------------
上面是一个简单的例子,却说明了一个事实:
做计算时,限定了位数,正数,就能当做负数使用。
限定了位数,有两个意义:
数值是循环的,具有周期性;
有没有进位,都不必考虑。
代替负数的正数,怎么求呢?
公式,你一定能看出来: 正数 = 负数 + 周期。
--------------------------
在计算机中,8 位 2 进制,称为一个字节。
计数值范围是:0000 0000~1111 1111。
对应的十进制:0 ~ 255。
计数周期,是:2^8 = 256。
这里,共有 256 个机器数。
较大的128 个,就可以代表负数了:
-1 补码就是:-1 + 256 = 255 = 1111 1111。
-2 的补码 = 254 = 1111 1110 (二进制)。
。。。
-128 的补码 = 128 = 1000 0000 (二进制)。
较小的 128 个,就代表自身的数值了:0 ~ 127。
--------------------------
减法算式: 5 - 7 = -2, 用 8 位补码计算如下:
5 = 0000 0101
-7 的补码 = 1111 1001
--相加---------------
得: (0)? 1111 1101? = -2 的补码
在这里,用加法代替减法,略去进位,结果,就完全正确。
--------------------------
用正数(补码)代替了负数,减法运算也就没有了。
因此,计算机的硬件,就可以得到简化了。
所以,在计算机系统中,负数,一律采用补码表示和存储。
原码和反码,在计算机中,根本就不能用。
事实上,它们,根本就不存在。
--------------------------
什么是补码? 为什么要用补码?
看完上面的介绍,相信你都有了答案。
那么,原码和反码,就没有任何意义了。
这两种代码,只是用来求补码的过渡而已。
其实,原码和反码,还有“取反加一”,都是“鸡肋”。
浪费不少时间学习这些,却不能理解【补码的意义】何在。
况且,用“取反加一”求 0 和-128 的补码,就是难事。
-128,它没有原码和反码,拿什么取反加一?
-0 的补码,求出来是 0000 0000。
符号位,居然是 0 !
难道,负零,是正数吗?
有人说,零,不分正负,所有只有一个补码。
那么,原码反码中,为什么有两个零?
--------------------------
其实,原码反码符号位取反加一,就是一大篇自相矛盾的谬论。
小学生都弄懂的事,他们竟然弄出这许多骚操作!
老外数学不好,由此可见一斑。
二进制中的反码、补码、原码是什么?
在计算机系统中,数值,一律采用补码表示和存储。
也就是说,在计算机中,只有补码,并没有原码和反码。
补码,实际上,也就是一个“代替负数”的正数。
所以,使用了补码之后,计算机中,就没有负数了。
而且,在计算机中,也就没有减法运算了。
因此,计算机只需有一个加法器,就可以打遍天下。
补码的功能之一,就是可以简化硬件!
原码和反码,都没有这种功能。
所以,计算机,根本就不用它们!
它们是干什么的呢?
就是用来唬人的。
是为了让这些计算机老师,混碗稀粥喝。
------------------------
补码(也就是正数),怎么就能代替负数呢?
其实,很简单。
你看钟表的时针,倒拨 3 小时、正拨 9 小时,效果相同吧?
你看三角函数,-π/2 和 +3π/2,两者的函数值,相同吧?
再看 2 位 10 进数,0~99,计数周期是 10^2。
可以看到:
25 - 1 = 24
25 + 99 = (一百)? 24
你只要忽略进位(10^2),+99 和-1 就是等效的。
以上这些,有如下规律:
正数 = 负数 + 周期。
这个正数,就是“负数的补数”,它就可以代替负数,进行运算。
在三角函数中,负角度,和正角度,是怎么变换的呢?
也是用这样的公式: 正角度 = 负角度 + 周期(2π)。
----------------------
计算机用二进制,补数,就称为:补码。
8 位 2 进制数,它们可以构成 256 组代码。
所以,计数周期就是:2^8 = 256。
求补码的公式是: 补码 = 负数 + 周期(2^n)。
-1 的补码就是:-1 + 256 = 255
= 1111 1111 (二进制)。
-2 的补码就是:254 = 1111 1110。
。。。
-128 的补码就是:128 = 1000 0000。
以上就是 256 组代码中的 128 个负数补码。
正数,必须直接参加运算,不许做任何变换。
正数本身,已经就是正数,所以并不存在什么“正数的补码”。
-------------------------
举例说明,如: 5 - 7 = -2。
用八位补码计算的过程如下:
5 = 0000 0101
-7的补码= 1111 1001
--相加-------------
得: (1)? 1111 1110 = -2 的补码
舍弃进位,只保留八位,这就用加法,实现了 5-7。
----------------------
计算机,只用补码,因为补码运算符合数学的规律。
而原码反码,都是人为虚构出来的。
即使把它们说出天花来,它们也是不存在的。
求反加一、符号位不变。。。是怎么回事?
老外数学不好,才会想出这些个烂办法。
二进制的原码、反码、补码、移码
之前了解一些原码、反码、补码,但是一直有疑问,为什么会有原码、反码、补码?所以决定研究一下。
计算机中参与运算的数有两大类:无符号数和有符号数。此篇主要看一下有符号数。在了解原码、反码、补码前需要先了解机器数和真值。
对于有符号数而言,使用“0”表示正,“1”表示负,这种把符号“数字化”的数称为 机器数 ,也就是一个数在计算机中的二进制表示。
例如:+1100 在机器中表示为 0 1100;-1100 在机器中表示为1 1100
整数的符号位和值用逗号隔开,小数的小数点用点来隔开。
例如:+3转换成二进制就是00000011,-3就是10000011,这就是机器数。
带符号位的机器数对应的真正数值就是 真值 。例如:1000 0011的真值是-3,而不是131,它的最高位是符号位。
下面开始说原码、反码、补码。
原码是机器数中最简单的一种表示形式,包括符号位和数值位。
原码: 符号位加上真值的绝对值,即第一位表示符号位,其余为表示值。原码是人脑最容易理解和计算的表示方式。
整数原码的定义:
小数原码的定义为:
原码的问题:
以正负1来说明问题,先来看1+(-1)的计算过程:
1+(-1)=0,但是用原码来算结果却是-2,原码的加法没有问题,但是减法却出现了问题。
为了解决原码做减法时出现的问题,出现了反码,我们用其他的方式来表示负数,使减法的问题用加法去解决。
补数的思想:
要了解补码的思想就要知道“模”、“同余”、“补数”的概念。
在日常生活中,常会遇到“补数”的概念。计算机组成原理(唐朔飞)中举了一个时钟的例子,现在是6点钟,要到达3点钟的话该怎么办呢?我们可以顺时针方向将时针移动9小时,或是逆时针移动3小时,我们都可以到达3点钟,假设顺时针转为正,逆时针转为负,则有:
钟表时针转一圈能代表12个小时,在数学上称12为模,写作mod 12,对于mod 12而言,+9和-3互为补数,3和15是同余关系,记作3≡15 (mod 12),3 + 12 = 15.
其实就相当于没到12点就丢失,从0点重新开始。
将补数的概念用到计算机中,便出现了补码这种机器数。
补码 :正数的反码是其本身,负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1),这里只是便于计算才这样说。
对于补码,相当于是模加上真值,就如同上面的6+(-3),-3就是真值。
整数补码的定义为:
例如:
当x=+1010时,[x] 补 =0,1010;
当x=-1101时,[x] 补 =2 n+1 + x = 2 5 - 1101 = 100000 - 1101 = 1,0011
小数补码的定义为:
小数补码定义中mod 2的由来:
例如:
当x=+0.0110时,[x] 补 =0.1001;
当x=-0.0110时,[x] 补 =2 + x = 10.0000 - 0.0110 = 1.1010
当x=0时,
[+0.0000] 补 =0.0000;
[-0.0000] 补 =2 + (-0.0000) = 10.0000 - 0.0000 = 0.0000;
显然[+0] 补 =[-0] 补 =0.0000,即补码中的“零”只有一种表示形式。
补码的符号位扩展:
1、补码的正负小数符号位扩展就是在末尾加0即可,例如:1.1101扩展为1.1101 0000
2、补码的正数符号位扩展在最高位前面加0即可,例如:0101扩展为0000 0101
3、补码的负数符号位扩展在最高位前面加1既可以,例如:1010扩展为1111 1010
反码通常用来作为由原码求补码或者由补码求原码的中间过渡。
反码: 正数的反码是其本身,负数的反码是在其原码的基础上,符号位不变,其余各个位取反。 这个方法只是利于计算,但是并不代表反码的真正含义,可以把它忘记
整数反码的定义为:
小数反码的定义为:
因为补码符号位和数值一起编码,所以很难从补码上直接判断出其真值的大小,而用移码就可以很直观的看判断出来。
移码的定义:
利用移码的这一特点,当浮点数的阶码用移码表示时,就能很方便的判断阶码的大小。
移码 相当于补码的符号位取反。
对于补码来说是存在符号位的,使用移码就相当于把补码的负数部分往上移动,使得最小值变为0,而不是负数。
移码更详细的用处以后再研究。
写在最后:
二进制反码和补码如何表示?
原位:无
反码:无
补码:10000000
1 原码和反码都无法表示, 补码是10000000
2 -128没有反码
3 反码只能表示0到127,-0到-127
4.二进制原码或者8位二进制反码的表示范围是-127~+127,不能表示-128;而8位二进制补码的表示范围是-128~+127,-128的8位二进制补码为10000000。
扩展资料:
二进制数的补码
求二进制数的补数,目的是往计算机里面存放。
2.在计算机里面,存放的数字什么的,都称为机器码;那么二进制形式的补数,也就改称为补码了。
3.一般情况下,都是以 8 位二进制数来讨论补码,少数也有用 16 位数的。
4.计算时加上正数,是不需要进行求取补数的;只有进行减法(或者加上负数),才需要对减数求补数。
5.计算结果如果超出了-128~+127的范围,结果将是错误的,这是没有办法纠正的。
6.应用补码进行计算,完全符合前面介绍的“用补数可把减法转换成加法”的做法,只要忽略进位(这个进位1,就是求补的时候,加进去的1 0000 0000中的1),结果就是正确的。
7.求取补码,就按照定义的规定,负数采用“模减去绝对值”的方法来求,这是求补数的通用方法,适合于各种进制、各种大小的数字。
8.不要用求反加一的方法,也就不用理会原码和反码了,也不牵涉符号位的问题。
参考资料:百度百科--二进制算法