C# 通俗易懂的介绍基础知识(二)——进制、原码、反码、补码

一、什么是进制

我们用十进制来理解其他进制。

我们日常用的就是十进制,我们一起来数个数:

十进制:00、01、02、03、04、05、06、07、08、09

                10、11、12、13、14、15、16、17、18、19、

                20、21、22、23、24、25、26、27、28、29

先看蓝色数字,我们拥有从0到9,一共10个数字,从0数到9,数字用完了,那就前面一位(橘黄色部分)往上一位一位升。那么我们再理解别的进制。

二进制:0、1(我们只有两个数,结果用完了,为了方便理解,你可以把他们看成00,01)

                10、11(又用完了,再往前加)

                100、101、110、111

                1000、1001、1010、1011、1100、1101、1110、1111

                (之前是数到九往前进1,现在是数到1就要往前进1)

八进制:0、1、2、3、4、5、6、7

                10、11、12、13、14、15、16、17

                20、21、22、23、24、25、26、27

十六进制:(这里值得说一下,按我们的习惯,我们只有10个数字:0、1、2、3、4、5、6、7、8、9,但我们需要16个数字,于是往后加了字母,就变成0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,这样我们就凑够16个符号了,接下来我们开始数数

0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F

10、11、12、13、14、15、16、17、18、19、1A、1B、1C、1D、1E、1F

20、21、22、23、24、25、26、27、28、29、2A、2B、2C、2D、2E、2F


二、进制的转换

我们平时用的就是10进制,看其他的看着不舒服,那我们就要学会他们怎么变成10进制,又怎么变回去。

十进制转二进制:(不停的用除出来的得数再除2,要余数)

例:把25转换成二进制

25/2=12余1

12/2=6  余0

6/2=3    余0

3/2=1    余1

1/2=0    余1

答案要从下往上排就是11001

十进制转八进制:(不停的用除出来的得数再除8,要余数)

例:把25转换成八进制

25/8=3余1

3/8=0  余3

答案要从下往上排就是31

十进制转十六进制:(不停的用除出来的得数再除16,要余数)

例:把25转换成十六进制

25/16=1余9

1/16=0  余1

答案要从下往上排就是19

二进制转十进制:

例:把11001转换成十进制(次方就从又往左依次增加)

八进制转十进制:

例:把31转换成十进制(次方就从又往左依次增加)

十六进制转十进制:

例:把19转换成十进制(次方就从又往左依次增加)


三、原码,反码,补码

这里的原码指的是计算机语言的原码,我们知道,计算机的语言是二进制,所以它的原码的样子就是010111,这种二进制的数字串。

但是,在这个时候,出现了一个问题,我们的正数都可以用二进制来表示,如:2的二进制是10.

那负数怎么办?

这时候,有个大聪明就说:那我们把数的前面都再加一位,0表示正,1表示负!

这样010就是+2,110就是-2,这不就行了,

可是问题来了,你知道第一位表示的是负号,计算机不知道

计算机会把它当成6,这就会导致,只要出现负数,就一定会错。

可减法其实就是负数。

那减法怎么办?

我们先看看二进制加法:

例1:

+2的二进制10

那么10+10=100

这个100刚好是4,

例2:

+2的二进制10

+1的二进制1

那么10+1=11

这个11刚好是3,

说明我们加法没问题

那我们减法咋搞?如果和加法一样?

正常思路:2-2就是2+(-2)

例1:

2为010

-2为110

所以10+110=1000,1000是8

例2:

+2的二进制10

-1的二进制101

那么10+101=111

这个111答案为7,就算你把第一个1去掉,也是11,答案为3

这答案不对

那二进制减法怎么做,怎么才能计算出正确的减法?

改变减法的计算流程,遇见加法就让计算机正常做,遇见减法,就让计算机换个方式做加法

一个大聪明发现:

我们正数没问题,那么正数就不动,只改变负数,让他们的结果是对的就可以;

+2的二进制是010,那就让它一直是010

下面为我们一起去想办法更改减法的计算流程,

当计算机遇见减法时:

例:

+2的二进制010

-1的二进制101

在计算机眼里,他是10+101

那么我们告诉计算机,你这样做:

第一步:

-1的二进制是101,左边第一位的1表示符号,所以这个1不变,

其余的01,我们先把0和1反一下(把1变成0,把0变成1),

最后得到110

第二步:

上面得到110,

给100+1,

则100+1=111

第三步:

现在我们再和前面的正数相加

010+111=1001

然后告诉计算机,因为之前我们最多的是三位,也就是之前的-1,是101,所以我们现在也只能取3位,所以计算机取出来是001,答案就是1

例2:

我们随便再取一个数试一下,

9的二进制:1001

-5的二进制:1101

9+(-5) =1001+1101

9不变,为1001

-5

第一步:1010

第二步:1011

第三步:1001+1011=10100

第四步:之前最高位为4位,现在也取4位,变为0100

0100刚好为4

总结:当你计算二进制减法的时候,正数不变,

第一步反码:负数除了开头表示符号的1,其他反一下

第二步补码:把上面反过的数+1

第三步:再去和正数相加

第一步操作完的数叫反码,第二步+1后的数叫补码

这两个就是用来计算减法的

四、传送门

上一站:

C# 通俗易懂的介绍基础知识(一)_菌菌巧乐兹的博客-CSDN博客

下一站:C# 通俗易懂的介绍基础知识(三)——标识符、起名规范、引用类型_菌菌巧乐兹的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/weixin_49427945/article/details/127546020
今日推荐