十进制转p进制 c++_学习笔记之二进制十进制和十六进制

  • Post author:
  • Post category:其他


二进制和十六进制对于程序员来说应该是很熟悉的东西了,我也不知道为什么我现在还在看这个呢?^_^


什么是二进制?什么是十六进制?



说到进制我们最熟悉的莫过于十进制了,我们从小学的数学都是用的十进制。所谓十进制就是逢十进一,从0开始数 0、1、2、3、…..7、8、9,十个数了再下一个数就要进一位变成10(变成了两位数)。二进制就是逢二进一,0、1再下一个数就要进一位了变成10(变成两位数),十六进制数的道理也是一样的,从0开始数,0、1、2、…..7、8、9发现还没到十六个数还不能进一位,所以不能变成10,那怎么办?数字不够用那就用字母来凑,9后面接着数A、B、C、D、E、F,然后才进一位变成10。


进制间的转换



人类习惯看十进制的数,看到一长串的二进制数就一脸懵逼。计算机就只认二进制的数,看到十进制也是一脸懵逼。至于十六进制我想就是为了取个平衡吧(十六进制和二进制的转换会容易些)。

什么叫进制的转换呢?比如说二进制中0、1后面的数是10(不读作“十”),我们知道在十进制中1后面是2,所以二进制中的10转换为十进制就是2,反过来十进制中的2转换为二进制就是10。当然进制间转换不能靠数。

先从简单的二进制转十六进制说起:比如二进制101010110

1d8c8db8544ddd5a2985a06cc1637770.png

如图所示:将二进制每四位分为一组,不够四位的前面补0(例子中没补)。每一组都可以转换为一个十六进制的数,将这些数连在一起就是结果,也就是说上面的二进制转换位十六进制为156。那么每一个组里的二进制要怎么转为十六进制呢?

de9c5a88edc2d373caf373a5f8c32f15.png

从上图可知0110的值计算为0*8 + 1*4 + 1*2 + 0*1 = 6。如果4位全为1刚好是十六进制的F,这可以解释为什么是4位划分为一组了。

十六进制转二进制刚好是一个相反的过程。将十六进制数的每一位转化为一个4位的二进制,然后连起来。

95e3bfd108feef53a3674a4f92893498.png

二进制转十进制的思路第二幅图的思路是一样的,只不过不分组就是了。例:

a746d0b84995bec392344a86f71b7983.png

十进制转二进制就比较麻烦了,要将十进制的数不断除2取余数,懒得写了丢个网上的图片:

a28722c79238c4ae932ad95aaacb82b3.png