一个数的原码,反码,补码怎么算

一个数的原码,反码,补码怎么算,第1张

数字,存在计算机中,就是“码”。

在计算机中,没有原码和反码

计算机,只是使用“补码”来存放“正负数”。

以八位为例:

数字 0 的存放形式是:0000 0000。

数字+1,就是加上一:0000 0001。

数字+2,就再加上一:0000 0010。

数字+3,就依此类推:0000 0011。

依次加一,即可。

----------

负数,就是依次减一。

数字 0 的存放形式是:0000 0000。

数字-1,就是减一:0000 0000-1,

 只保留八位,可得:1111 1111(=255)。

数字-2,就再减一:1111 1110(=254)。

数字-3,继续减一:1111 1101(=253)。

然后你就依次减一吧

----------

以上,是计算机中的补码。

---------

八位补码的表示范围:-128~+127。

八位补码的计算公式:

正数的补码:就是正数本身。

负数的补码:256-该负数。

(如果需要二进制,你就再转换一下。)

---------

补码,完全是由二进制加一减一自然形成的,和原码反码没有任何关系。

计算机中,也没有原码和反码。

所以,原码和反码,都没有任何用处。

补码、原码、反码,这些都是计算机专家创造的词汇。

事实上,它们,都不应该存在。

计算机的运算,是很简单的,和这些词汇,并没有任何关系。

--------------------------

你想象一下:

有一个小朋友,很小的,大概是三岁吧。

他只会数一百个数(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 !

 难道,负零,是正数吗?

 有人说,零,不分正负,所有只有一个补码。

 那么,原码反码,为什么有两个零?

--------------------------

其实,原码反码取反加一,就是一大篇自相矛盾的谬论。

老外数学不好,由此可见一斑。

正整数的原码反码补码是一样的。对负数来说,例如101,第一位是它的符号位,表示负数,抱持不变,后面的按它的绝对值取相反数。就是110。而负数的补码,就是在它反码的基础上加1,就是110+1,那么它的补码就是111。总之,你记得,正数全一样。负数求反符号位不变,其余变成相反数就成。负数求补的过程就是先求反再加1。

反码算数运算,规则是从低位到高位逐列进行计算。0和0相加是0,0和1相加是1,1和1相加是0,但要产生一个进位1,加到下一列。如果最高位相加后产生进位,则最后得到的结果要加1。

注意事项:

1、反码运算时,其符号位与数值一起参加运算。

2、反码的符号位相加后,如果有进位出现,则要把它送回到最低位去相加。

3、用反码运算,其运算结果亦为反码。在转换为真值时,若符号位为0,数位不变,若符号位为1,应将结果求反才是其真值。

原码就是把原来的数化成2进制
比如10的原码就是00001010,+10的原码是00001010,最高位的0代表
这个数是正数(最高位就是符号位)
-10的原码就是10001010,最高位的1代表这个数是负数
+10的原码是00001010,那他的反码,补码都和原码相同
也是00001010,原因是正数的原

补码相同
-10的原码是10001010,那他的反码是11110101,也就是符号位不变,其他位0变1,1变0
他的补码是在反码的基础上,最低位加1,也就是11110110
明白了吧

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]补
对于负数,
补码表示方式也是人脑无法直观看出其数值的
通常也需要转换成原码在计算其数值

原码反码补码计算方法如下:

一、原码

1:字长为8 , 符号位(首位)为0 表示正数 ; 符号位(首位)为1 表示负数。

2:0000 0001 表示 正1 ; 1000 0001 表示负1。

二、反码

1:正数,反码和原码一样。正1的原码和反码为0000 0001。

2:负数,符号位不变,其他位取反。负1的反码为:1111 1110。

三、补码

1:正数,补码和原码一样。正1的补码为 0000 0001。

2:负数,补码为反码加1,负1的补码为 1111 1111。

3:计算机在计算的时候是用补码在计算。

四、移码

1:补码的符号位取反 正1的移码为 1000 0001 ; 负1的移码为 0111 1111。

二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统使用的基本上是二进制系统。

数据在计算机中主要是以补码的形式存储的。计算机中的二进制则是一个非常微小的开关,用“开”来表示1,“关”来表示0。20世纪被称作第三次科技革命的重要标志之一的计算机的发明与应用,因为数字计算机只能识别和处理由‘0’‘1’符号串组成的代码。

其运算模式正是二进制。19世纪爱尔兰逻辑学家乔治布尔对逻辑命题的思考过程转化为对符号"0''''1''的某种代数演算,二进制是逢2进位的进位制。0、1是基本算符。因为它只使用0、1两个数字符号,非常简单方便,易于用电子方式实现。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/10315630.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-07
下一篇 2023-05-07

发表评论

登录后才能评论

评论列表(0条)

保存