原码补码反码

第一次接触源码补码反码的时候是大一的计算机算法导论。
后来在数电接触过一次,在学网络原理的时候,关于子网掩码的计算又接触过。
一直没把关系屡清楚...
马上就要组原考试了,今天怎么着做个了断对吧。

1.序言(由之前的基础的话,跳过去看第二节)

万事万物肯定是来源是生活的
首先计算机参与运算的数有两大类, 有符号数无符号数
他们都放在了寄存器之中。通常我们也称为寄存器的位数是机器字长。
这里注意。机器字长也是决定计算机硬件的主要技术指标。决定计算机性能的这个问题,我们之后再谈。

那啥是机器字长啊, 举个例子吧那就
cpu的寄存器要运算器东西,肯定有个限度吧。
他要是做运算的时候,给他发过来一个八位的代码,他机器字长正好是八位的。就可以处理。
那人家要是传一个十六位的代码,岂不是就GG了。  他只能处理八位的,那就只能让人家发两遍,第一次运行前八位的,第二次再把剩下的八位没运算的算完。
用脚指头想都知道,这算两次,在其他条件的情况下。 时间可就是double了啊。

 好,我们大概知道机器字长的概念了,继续。
万事万物都来源与生活。
如果生活只有正数的话....岂不是如果有赊欠、损失、消费、开支等等这些就太麻烦了
(所有数学家是真牛逼,一个负号就解决了)
负号大家用着很方便,但是计算机他去哪里知道什么是负数去啊....
所以这就有了有符号数这么一说,有符号数的第一位就作为判断这个数正负而空出来。其他的位数用来存储数据。

那么无符号顾名思义,就是在计算机在进行存储运算的时候,所有的位数都用来进行储存数字了,毫无正负可言。

那么如果一个16位机器字长的寄存器为例子。
如果存储的是无符号数,那么可以表示的范围是 0~65535   (2的16次方-1)
但是存储的是有符号数,那么可以表示的范围是 -32768~32767(2 的15次方-1) ()

计算机就是个会处理01的机器,别说是正负号了,你拿+ -  都白搭啊
那你既然知道0 和1 是啥  那咱们就规定一下吧   0就代表正数,1代表负数。

大概就是这个样子了
前两行是小数点的有符号数表示
后两行是整数的有符号数表示。

2.原码补码反码计算方法。

需要速查的可以看这里。

那么 (+)(-)1 这个数字如何在机器字长为8位的寄存器中,分别用原码、反码、补码来表示呢

2.1原码: 难度系数★☆☆☆☆

数字±1的原码是(注意逗号)

[+1] = 0,000 0001

[-1] = 1,000 0001

数字±0,1的原码(注意小数点)

[+0.1] = 0.100 0000

[-0.1] =  1.100 000

我们看到第一位的数值被占用,  用0或者1 作为判断正负的标志。
那么笔者再举几个例子吧。

+1010111
-1011011
+110
-10011

那么这些的原码分别是什么呢

1,1010111
0,1011011
1,110
0,10011
再多的例子我也举不出来了,咱们之间可以上公式嘛。

x是真值,n是位数。想深究的同学可以自己带进去看看,不过不建议记公式,理解就好了。

2.2反码  难度系数★☆☆☆


我们先看一下公式吧。

emmmm   这个公式我要是套进去算一算的话,我也得搞一会。

简单的说,
正数的反码是他原码
负数的反码是在其原码的基础上, 除了符号位数不变,其余位取反.

平常反码也就是用原码求反码过程的过渡。

那咱们举个例子来看看吧。

来,来几个数字!
+11001010
+11010101
+11111001
他们如果求反码的话,把整数摘掉就好了 前面加个0,即可。
那么如果是负数呢?
来,上几个数字!

-1001
-1101
-1001

先把他们搞成原码,相信同学大家都会了对吧~
1,1001

1,1101

1,1001

(以后原码补码反码出现正负号就乱棍打死丫的。计算机不认识正负号!!!)

符号位不变,其他值取反。

1,0110

1,0010

1,0110

嗯嗯就是这样就是这样了。

2.2补码  难度系数★☆☆

好了好了,来来来补码let's go

补码这个东西是吧。

上公式先,

好的,我知道反正你不想看。

那我就简单来说吧

正数的补码就是其本身

负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)

x=+1001

[x]反=0,1001

[x]补= 0,1001  (我再说一遍,谁要是在原码补码反码上写正负号 就乱棍打死丫的。 计算机不认识正负!!!)

x=-1001

[x]原码=1,1001

[x]反码=1,0110

[x]补码=1,0111

原文地址:https://www.cnblogs.com/EEEE1/p/8098876.html