源码反码补码的范围(源码 反码 补码的意义)
本文目录一览:
什么是原码,补码和反码
正负数,在计算机中,只是用【补码】来存储。
而原码和反码,在计算机中,并不存在。
下面按照八位二进制来说明补码的意义。
十进制数 0,存放形式,就是二进制 0000 0000。
十进制数 +1,就加上 1,二进制是 0000 0001。
十进制数 +2,就再加 1,二进制是 0000 0010。
。。。
十进制数 +127,加 1加 1...,就加到了 0111 1111。
+127,这就是最大数值。
----------
负数怎么办? 你就从 0,依次递减吧。
十进制数 0,以二进制 0000 0000 存放。
十进制数 -1,就减去 1,得 1111 1111 = 255(十进制)。
十进制数 -2,就再减 1,得 1111 1110 = 254。
十进制数 -3,就再减 1,得 1111 1101 = 253。
。。。
十进制数 -128,减 1减 1...,得 1000 0000 = 128。
不要再减了,这就是最小值了。
(你再继续减,就是 0111 1111,这就是+127 了。)
因此,最小数值就是-128。
----------
总结:
零和正数:直接用二进制存放。
负数:存放形式是【256+这个负数】。
这套存放格式,就是所谓的【补码】。
求【补码】,就是这么简单。
完全不用绕到“原码反码符号位”那么远。
可以用十进制来计算。如果需要二进制,你就再转换一下。
用这个方法,不涉及原码反码符号位,就少了不少麻烦事。
----------
为什么负数用补码存储?
利用补码,可以把减法运算,转换成加法。
(所以,在计算机中,有一个加法器,就够用了。)
例如,6-2 = 4,在计算机中,用补码代替数字,运算如下:
6 的补码是 0000 0110
+ -2 的补码是 1111 1110
-----------------
(1) 0000 0100 (= 4 的补码)
(括号中的 1,是进位,舍弃不要了。)
注意:
如果运算结果超出了-128~+127 的范围,结果将是错的。
这种现象称为“溢出”。
再注意一下:进位,并不等于溢出。
---------
因为补码的这个特性,所以,在计算机中,只是使用补码存放数据。
而原码反码,在计算机中,都是不存在的。
所以,大家,完全不必在原码反码 上浪费时间精力。
谁能告诉我计算机的原码补码和反码的具体定义是什么?
带符号数,有三种表示方法,即:原码、反码和补码。
但是,在计算机系统中,数值一律用【补码】来表示和存储。
所以,在计算机系统中,原码和反码,都是不存在的。
不存在的东西,也就不必关心了。
------------------
下面,针对补码,给出解释。
比如,有一个小孩,很小的。
他只认识 100 个数(0~99),也不会做减法。
那么,就可以告诉他:“减一”,就用“加 99”算吧。
36 - 1 = 35
36 + 99 = (1) 35
忽略进位的 100,结果不是一样的吗?
那么,就是说:
99,就是-1 的补数。
利用“补数”,就可用“加法”代替“减法”。
这就可以简化计算机的硬件。
计算方法:
-1 的补数 = 100 - 1
其中的 100,是两位十进制数的:周期。
---------------------
在计算机中,是以二进制存放各种信息的,统称为:代码。
八位,作为一个计算单位。
范围是:0000 0000 ~ 1111 1111。
写成十进制,就是:0~255。计数周期就是:256。
那么:
1111 1111 = 255(十进制),就是-1 的补码。
1111 1110 = 254,就是-2 的补码。
。。。
1000 0000 = 128,就是-128 的补码。
计算公式: 补码 = 周期 + 负数。(再变为二进制。)
求负数的补码,就是这么简单。
正数,直接参加运算即可,不许做任何变换。
因此,补码的定义,如下:
正数的补码: 正数,没有补码,直接运算。
负数的补码: 周期 + 该负数。
---------------------
原码和反码,在计算机中,并不存在。
原码和反码,只能写在纸上,或停留在口中。
无论它们是怎样定义的,都是毫无意义的事。
原码反码补码的范围
如果采用一个字节来保存有符号数,那么原码的八位,表示的范围是-127----+127
八位反码的表示范围是-127-----+127
八位补码的表示范围是-128------+127
什么是原码、反码、补码?
计算机中,并没有原码和反码。
正负数据,在计算机中,只是以补码存放的。
以八位二进制来说明补码结构。
数字 0,就是以 0000 0000 存放。
数字 1,就是加上 1,得 0000 0001。
其它,继续加,就行了。
数字 127,就是 0111 1111。
------
数字-1,就是 0 减一,即:
0000 0000-1 =(借位 1) 1111 1111。
只保留八位,存放形式就是 1111 1111 (十进制 255)。
数字-2,就再减一,得:1111 1110 (= 254)。
数字-3,就再减一,得:1111 1101 (= 253)。
其它,继续减,即可... ...
数字-128,存放形式就是:1000 0000 (= 128)。
------
以上这些,就是补码。
八位补码可以表示:-128~+127。
计算公式:
负数的补码=【256+该负数】
正数的补码,就是正数本身
(如果需要二进制,你自己再变换。)
------
用补码代替负数,就可以把减法,转换为加法运算。
因此,计算机只要有一个加法器,就够用了。
例如: 7-3 = 4。
用补码的计算过程如下:
7 的补码=0000 0111
-3的补码=1111 1101
--相加-------------
得:(1) 0000 0100 = 4 的补码
舍弃进位,只保留八位作为结果,就是 4。
这就用加法,解决了负数以及减法的问题。
------
原码和反码,并没有这些功能。
所以,在计算机中,并没有原码和反码。
所谓的“取反加一”,由谁算呢?
计算机,可不做这些事。
原码和补码的表示范围?
如果是n=8位二进制:
原码范围:-127~+127,写成16进制为FEH~7FH
补码范围:-128~+127,写成16进制为FFH~7FH
如果是n=16位二进制:
原码范围:-32767~+32767,补码范围:-32768~+32767
如果是n=32位二进制:
原码范围:- 2 32-1 –1 ~+ 2 32-1 –1 ,补码范围:- 2 32-1 –1 ~+ 2 32-1 –1
原码公式:- 2 n-1 –1 ~+ 2 n-1 –1
补码公式:- 2 n-1 ~+ 2 n-1 –1
(公式中的n-1是指数)