1. 原码反码和补码
有一个小孩,很小很小的,他只认识100个数,也不会做减法。
那么,减一,你就可以告诉他,用加99代替:
比如:
36-1=35
36+99=(1)35
忽略进位100,结果不是一样的吗?
那么:
99,就是-1的补数。
98,就是-2的补数。
。。。
利用补数,就可以把减法,转换为加法运算。
--------------------
在计算机中,数据,都是以二进制存储的,称为:代码。
八位二进制的范围是:00000000~11111111。
用十进制表示,就是:0~255,共有256组代码。
正数,直接参加运算即可,用不着求补码。
那么,负数呢?
-1的补码,就是255(11111111);
-2的补码,就是254(11111110);
。。。
-128的补码,就是128(10000000);
这些负数,与补码之间的关系式,小学生都可以推算出来。
根本就不用扯到“原码和反码”。
在计算机中,根本就没有原码和反码。
2. 原码反码补码
一、正整数的原码、反码、补码完全一样,即符号位固定为0,数值位相同二、负整数的符号位固定为1,由原码变为补码时,规则如下: 1、原码符号位1不变,整数的每一位二进制数位求反,得到反码 2、反码符号位1不变,反码数值位最低位加1,得到补码
3. 计算机原码反码补码怎么算
计算机原码反码补码计算方法:
1、原码
原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。比如如果是8位二进制:
[+1]原 = 0000 0001
[-1]原 = 1000 0001
第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:[1111 1111 , 0111 1111]
即[-127 , 127]
原码是人脑最容易理解和计算的表示方式。
2、反码
反码的表示方法是:正数的反码是其本身。负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
可见如果一个反码表示的是负数,人脑无法直观地看出来它的数值。通常要将其转换成原码再计算。
3、补码
补码的表示方法是:正数的补码就是其本身。负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1。(即在反码的基础上+1)。
[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补
对于负数,补码表示方式也是人脑无法直观看出其数值的。通常也需要转换成原码在计算其数值。
(3)源码补码反码扩展阅读:
原码,反码和补码是完全不同的。既然原码才是被人脑直接识别并用于计算表示方式,为何还会有反码和补码呢?
首先,因为人脑可以知道第一位是符号位,在计算的时候我们会根据符号位,选择对真值区域的加减。但是对于计算机,加减乘数已经是最基础的运算,要设计的尽量简单。计算机辨别"符号位"显然会让计算机的基础电路设计变得十分复杂。于是人们想出了将符号位也参与运算的方法。我们知道,根据运算法则减去一个正数等于加上一个负数,即: 1-1 = 1 + (-1) = 0 , 所以机器可以只有加法而没有减法,这样计算机运算的设计就更简单了。
于是人们开始探索将符号位参与运算,并且只保留加法的方法。
4. 什么是原码 补码 反码
计算机中,没有原码反码。
计算机中,只有补码,用于表示正负数。
以八位码长,来说明:
数字 0 的补码是:0000 0000。
数字 1 的补码是:0000 0001。
数字 2 的补码是:0000 0010。
。。。依次递增。。。
数字 127 的补码,就是:0111 1111。
负数,你就依次递减吧。
数字 0 的补码是:0000 0000。
数字 -1 的补码是:1111 1111。(=255)
数字 -2 的补码是:1111 1110。(=254)
。。。依次递减。。。
数字 -128 的补码,就是:1000 0000。(=128)
---------------
由此可推出补码的定义:
零和正数的补码,就是该数字本身。
负数的补码,就是:256 + 该负数。
---------------
这就是:计算机中,正负数的存放格式。
其他说法如:原码反码符号位,都是人为瞎编的。
它们和计算机,没有任何关系。
5. 原码 反码 补码
说到二进制补码,大家都知道:有符号数的负数的补码是 其正数的反码+1,例如 10001111 的补码是反码01110000 加 1 =01110001 ,很多书都这么说,可是为什么这样计算的结果就是它的补码?为什么要用补码?很多书要么不解释,要么就是说:这是因为在计算机内补码计算最快。(其实是补码计算指令的CPU设计更容易实现) 最初我看的书,《大学计算机基础教程》(我非计算机专业),这破书说不清,道不明,给与我非常严重负面的影响,以至于我在以后的计算机学习过程中,程序设计中遇到大大小小不少麻烦和迷茫。
在某些计算机组成原理书上提到:其实补码的计算原理,是用一个模来减去无符号的正数部分。譬如时钟,12点之后是13点,但是时钟上没有13点怎么办?就用13减去12=1点。这个模是12.可惜这个比喻并不是很好。
请看 一个字节长的无符号数的表示范围 :0~255,有符号数的表示范围:-128~127 , 注意,这个表示范围的写法极有可能影响我们的思维,从而导致错误。我们应该这样来写:0~127 ~ -128 ~ -1 ,这才是较好的写法。为什么?因为这个写法的数的顺序与0~255 一一对应。
由上,我们了解,其实补码不过是用128 ~ 255 这段范围的数来表示 ~128 ~ -1这段范围的负数。那么我们就可以凭自己,而不是看教材,就可以推测出计算补码的公式,就是:256-欲求的负数的绝对值= 此负数的补码。
没错,就是这么简单的东西,可是却困扰了很多人。可见有个好的教材是多么的重要。
至于前面 “负数的补码是 其正数的反码+1” , 极为垃圾的教材才会把这个计算方法作为初始方法来教。因为这个计算方法屏蔽了补码的计算原理。其实这不过是 “256 - 欲求的负数的绝对值 = 此负数的补码”的一个比较取巧的计算方法而已。请看 256=1 0000 0000 =1111 1111+1,而 1111 1111减任何二进制数的结果就是把这个数取反,那么 256 - 某二进制数A 既是:将 A取反 +1
以上:完毕!
注:所有讨论均在字节长范围内(8bit) 进行
6. 一个数的原码,反码,补码
一个正负数据,在计算机中,是用补码来代表的。
在计算机中,并不存在原码和反码。
利用补码,就可以用加法,代替减法运算,从而简化计算机硬件。
------
理解补码,要先从补数开始。
时针转一圈,周期是 12 小时。
倒拨 3 小时,就可以用正拨 9 小时代替。
9 就是-3 的补数。9 = 12-3。
同理,分针倒拨 X 分,就可以用正拨“60-X”代替。
60 是分针的周期。
------
对于两位十进制 0~99,周期就是一百。
这时,减一,你就可以用 +99 代替。
25 - 1 = 24
25 + 99 = (1) 24
结果取两位,舍弃进位。这两种算法,功能就是相同的。
99,就称为-1 的补数。
98,就是-2 的补数。
。。。
利用补数,就可以用加法,代替减法运算。
补数怎么求?
正数,不需要求补数。
负数的补数 = 周期 + 该负数。
------
计算机使用二进制,补数,就改称:补码。
八位二进制,共有 256 个数字。周期就是 256。
负数的补码 = 256+该负数。
16位二进制,共有 2^16 个数字。负数的补码 = 65536+ 该负数。
在八位时:
-1 的补码是:256-1 = 255 = 1111 1111(二进制)。
-2 的补码是:254 = 1111 1110。
-3 的补码是:253 = 1111 1101。
。。。
-128 补码:128 = 1000 0000。
求取公式:负数的补码=周期+该负数。
正数,可以直接去运算,补码,就是它本身了。
------
利用补码,计算机仅需要一个加法器。
而原码和反码,不具备这种能力。
所以,在计算机中,并没有原码和反码。
原码和反码,究竟是多少,就不必关心了。
7. 原码,补码,反码都是什么意思,怎么算啊
把十进制数转换成二进制数后,二进制数就是原码
例如:十进制:2 -----> 二进制:10
“二进制:10“就是原码
为了凑够8位,在二进制10前面加6个0,变成00000010
2的原码:00000010
2的反码:00000010
2的补码:00000010
也就是,正数的原码,反码,补码都相同
下面是负数的原码、反码、和补码:
3的原码:00000011 -3的原码:10000011 也就是最左边的那个数表示正负,0代表正,1代表负,它也叫符号位
-3的原码:10000011
-3的反码:11111100 负数的反码是对其原码按位取反,符号位不变
-3的补码:11111101 负数的补码是在其反码的末位加1
计算机用补码计算
8. 原码 反码 补码怎么转换
反码补码原码怎么转换,来看看方法吧。
1、首先原始代码的最高位是符号位,0表示正,1表示负,中间值表示数字的绝对值。