导航:首页 > 源码编译 > 源码补码反码

源码补码反码

发布时间:2022-02-21 12:41:58

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表示负,中间值表示数字的绝对值。

阅读全文

与源码补码反码相关的资料

热点内容
压缩winsxs文件 浏览:172
安卓手机系统怎么终止系统更新 浏览:701
程序员需要注重养生吗 浏览:402
php框架网页 浏览:914
sed脚本执行系统命令 浏览:911
linux选中命令 浏览:138
outlook发件加密 浏览:259
h3c历史命令 浏览:507
曙光服务器怎么创建用户 浏览:721
命令文案例 浏览:798
识别什么花app 浏览:820
线上app是什么意思 浏览:45
单片机屏蔽部分端口 浏览:329
苹果版app是什么 浏览:745
云服务器能更换地址 浏览:76
linux预读算法 浏览:558
视频用什么app编辑 浏览:70
编译原理清华实验 浏览:978
闲蛋app人气怎么样 浏览:275
javacatch用法 浏览:861