进制的转换方法
一、进制
1. 概念
首先我们得知道进制的概念。所谓的进制,也叫做进位计数制,这是人为定义的带进位的计数方法。当然也有不带进位的计数方法,比如原始的结绳计数法,唱票时常用的“正”字计数法等。
任何一种进制,每一位上的数在运算时都是满X进一位。比如十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,X进制就是逢X进1位。以我们最熟悉的十进制为例,每逢十进一,当数为19时,下一位数的尾数便满足该进制的最大数,于是下一位末位清零,前置位+1,变成20。
2. 分类
在计算机中,目前常用的进制有如下几种:
●十进制;
●二进制;
●八进制;
●十六进制
因为在计算机的底层只能处理二进制格式的数据,也就是0和1,其他的文字、数字、字符等信息都要转换成二进制的格式,计算机的底层才能识别处理。所以作为一个程序员,二进制是我们必须要理解和掌握的哦。
3. 二进制
作为一个程序员,必须要掌握的进制就是二进制了,其实我们只需要参考十进制就可以很容易理解进制的问题了。所谓的二进制,里面只有0和1,且满二进一,所以在二进制里是看不到>=2的数的。比如二进制的前10位数分别是0、1、10、11、100、101、110、111、1000、1001。
4. 八进制
八进制中有0~7共8个数字,但没有8哦,其规则是满八进一,所以7的下一位数不是8,而是10。17的下一位数不是18,而是20。比如八进制的前10位数分别是0、1、2、3、4、5、6、7、10、11......
5. 十六进制
十六进制中有0~F共16个数字,同样没有16,其规则是满十六进一。在十六进制中,这16个数字分别是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。即9的下一位不是10,而是A,10这个数只是十进制的衍生物,这一点大家要注意!
同理,在十六进制中,19的下一位不是20,而是1A,1F的下一位才是20;99的下一位是9A,FF的下一位才是100。
6. 原码、反码与补码
6.1 原码
对一个正整数来说,所谓的原码,就是指一个整数对应的二进制,比如整数10的原码就是00001010。所以原码就是一个正整数原本对应的二进制形式。但负数的原码和正数却不一样,负数的原码要将正数原码的符号位(最高位)改为1,比如-10的原码就是10001010。
6.2 反码
正数的反码就是其原码,即正数的原码和反码完全相同。而负数的反码则是将原码中除符号位以外的所有位(数值位)都取反,即 0 变成 1,1 变成 0。如10的原码和反码都是00001010,而-10的原码是10001010,反码则是11110101。
6.3 补码
正数的补码就是其原码,所以正数的原码、反码、补码都相同。而负数的补码是其反码加1,-10的原码是10001010,反码则是11110101,补码则是11110110。我们可以认为,补码是在反码的基础上打了一个补丁,进行了一点修正,所以叫做“补码”。
所以原码、反码、补码的概念只对负数有实际意义,对于正数来说,原码、反码、补码其实都是一样的,如下图所示:
了解完这些进制的概念之后,接下来壹哥就给大家讲解最重要的进制转换问题,拿出小本本做好记录哦,重点来啦。
二、进制转换
1. 十进制和二进制的转换(掌握)
首先我们来学习十进制与二进制之间的转换,这是必须要掌握的哦。
1.1 十转二
如果我们想将十进制转为二进制,可以采用辗转法,将十进制除以2再取余,然后将余数和
最后的1按照从下向上倒序写的方法。例如我们想将十进制的302转为对应的二进制,过程如下:
302➗2 = 151 余0
151➗2 = 75 余1
75➗2 = 37 余1
37➗2 = 18 余1
18➗2 = 9 余0
9➗2 = 4 余1
2进制转十进制在线计算器4➗2 = 2 余0
2➗2 = 1 余0
1➗2=0 余1
我们将上面每一步得到的余数和最后的1,按照从下向上倒序的方式进行编写,所以302对应的二进制数为100101110。
1.2 二转十
如果我们要把二进制转为十进制,有两种计算方法。
第一种计算方法,是把二进制从最高位(最左边的“1”)开始,先按照从上到下的顺序写出来。先从第1位开始计算0*2,如果每一位上对应的余数是1,在乘以”2“之后还要再加”1“,否则就加0。接着用上一次计算得到的结果乘以2,后面再加1或者是0,以此类推。壹哥给大家用下面的例子进行演示:
例如:100101110
1…………0✖️2+1=1…………余数为1
0…………1✖️2+0=2………… 余数为0
0 …………2✖️2+0=4 ………… 余数为0
1 …………4✖️2+1=9……………… 余数为1
0…………9✖️2+0=18 ……………… 余数为0
1 …………18✖️2+1=37 …………余数为1
1…………… 37✖️2+1=75…………余数为1
1………………75✖️2+1=151………… 余数为1
0………………151✖️2+0=302 ………… 余0
通过这样的计算,我们就可以得到最终的十进制数302
第一种计算方式其实有点复杂,我们可以采用更简单的第二种计算方法。该方法是从最低位开始,每位上的数字*2的N次幂,N从0开始记数(0、1、2......),把每一位的乘积进行累加就是最后的结果。我们把上面的例子换成该方法进行计算,会如下所示:
1*2^8 + 0*2^7 + 0*2^6 + 1*2^5 + 0*2^4 + 1*2^3 + 1*2^2 + 1*2^1 + 0*2^0 = 302
其实根据第2种计算方法,你可以发现规律。最低位上计算出来的十进制结果最大值就是1,往前一位的最大值是2,以此类推,4、8、16、32、64、128、
所以如果该二进制位上是1,该位置上肯定可以得到对应的十进制最大值,否则只能得到0。比如11111111转成对应的十进制,就可以直接计算:1+2+4+8+16+32+64+128=255
壹哥个人推荐采用这种方式进行计算,简单快捷,基本上我们熟悉之后就可以直接口算出结果。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论