• 基础知识——进制 与 进制转换 (C++ 程序)


    目录

    一、进制的定义

    二、表示方法 

    1、当进制数 ≤ 10时

    2、当进制数>10时

    三、进制的计算

    1、整数

    2、小数

    3、非十进制数

    4、非十进制转十进制

    四、十进制转非十进制数

    1、整数部分

    2、小数部分

    3、整小混合

    五、程序实现

    1、十进制 转 其它进制

    2、其他进制 转 十进制

    3、N 进制转 M 进制

    六、大结局


    一、进制的定义

            进制就是当一个数,满足该进制的最大数时,该数前一位+1,本位清零。以我们最熟悉的十进制为例,满十进一,当数为19时,下一位数的尾数便满足该进制的最大数,于是下一位末位清零,前置位+1,变成20。而二进制三进制,十六进制等其它进制与十进制规则相同,都是逢x进一

            (以上内容纯属自己总结,非官方定义)


    二、表示方法 

            很简单,先这样,再那样,再这样! 咳咳,很简单!

    1、当进制数 ≤ 10时

             直接写出来,并在后面加上括号,表示进制数,如:1011010.1(2) 、 5437218(9),这两个数分别是  二进制的 1011010.1 和 九进制的5437218。

    2、当进制数>10时

            基本规则不变,当数字>0时表示方法有所改变,用ABC等字母代表10,11,12,如:ABD239D(16),123456789ABCDEFGHIJ(20),这两个数表示 16进制的 B0F239D 和 20进制的 123456789ABCDEFGHIJ 。


    三、进制的计算

            进制的计算很简单,只要将数字的每一位乘上那一位的 位权(每个数码所表示的数值等于该数码乘以一个与数码所在位置相关的常数)就行了。

    1、整数

            举一个最简单的例子,小学题目:一个数,个位上是1,十位上是7,百位上是3,千位上是5,求这个数。

            这道题十分简单,答案很显然是 5371 。怎么算出来的呢?算式是:1+7×10+3×100+5×1000为什么呢?因为在十进制中,满十进一,每一位的位权就是 10º、10¹、10²、10³ … 因此我们只要将 个位、十位、百位、千位 等位数上的数值 乘 那一位的位权就可以了。

    2、小数

            如:一个数,个位上是1,十位上是7,十分位上是5,求这个数。 

            同上,将数字的每一位乘上那一位的 位权 就行了。那么小数的位权是什么呢?例如:10负一次方 是什么? 10的正数次方就是 1 不断乘 10,负数次方就是 1 不断除以 10。所以,10负一次方自然是 1除以1个10,得:1/10 也就是 0.1 。那么,上面那个数就是71.5。

    3、非十进制数

            非十进制数第进制计算方法与十进制数是一样的,只不过位权改变了而已。

            例如二进制下: 101.01(2)。

    位数正三位正二位正一位负一位负二位
    位权1×2×2=41×2=21=11÷2=0.51÷2÷2=0.25
    数值10101
    十进制中的数值1×4=401×1=101×0.25=0.25
                                   4+1+0.25= 5.25

            三进制下: 201.22(3)

    位数正三位正二位正一位负一位负二位
    位权3²=93¹=31=11÷3≈0.331÷3÷3≈0.11
    数值20122
    十进制中的数值2×9=1801×1=102×0.11=0.22
    和(大约)                           18+1+0.22= 19.22

           十六进制下:A305.F(16)

    位数正四位正三位正二位正一位负一位
    位权16³=409616²=25616¹=161=11÷16=0.0625
    数值A=10305F=15
    十进制中的数值

    10×4096=

    40960

    3×256=

    768

    0×16=01×5=5

    15×0.0625=

    0.9375

                  40960+768+0+5+0.9375=41733.9375

    4、非十进制转十进制

            大家有没有发现,上面三个表向我们详细的展示了 二进制、三进制、十六进制 三种进制转换成十进制的计算过程。非十进制转十进制的方法就是这样:

    1、计算每一位的位权(建议从小数点开始往两边扩散,方便计算)

    2、用位权×那一位对应十进制数

    3、把算出来的每一位的数相加在一起

    4、没了……


    四、十进制转非十进制数

            为什么我没有将这一点放在 进制的计算 中呢? 因为两者的原理实在不同。

    1、整数部分

            这里用的方法是:除数取余法 名字是自己瞎猜的。

            算法:用整数部分不断除以进制数求出余数,直到商为0为止,记录下来,再正序阅读,即是当前十进制整数的 N 进制形式。

            看不懂 举个例子:十进制下的 666 转换成 十六进制步骤 :

    1、666 ÷ 16 = 41 ······ 10 (A)

    2、41 ÷ 16 = 2 ······ 9

    3、2 ÷ 16 = 0 ······2

    4、倒序阅读,得:29A

            是不是很简单。

    2、小数部分

    这里用的方法是:乘数取整法 名字是自己瞎猜的。

            算法:用小数部分不断乘进制数求出整数部分并去除整数部分只保留小数部分,直到乘积没有小数部分 、 小数部分开始循环到达想要得到的位置为止,记录下来,再正序阅读,即是当前十进制小数的 N 进制形式。

    ·        如:将十进制小数 0.1 转换成二进制

    1、0.1 × 2 = 0.2 ······ 0

    2、0.2 × 2 = 0.4 ······ 0

    3、0.4 × 2 = 0.8 ······ 0

    4、0.8 × 2 = 1.6 ······ 1  ,  1.6 去除整数部分为 0.6

    5、0.6 × 2 = 1.2 ······ 1  ,  1.2 去除整数部分为 0.2

    6、0.2 × 2 = 0.4 ······ 0

    7、0.4 × 2 = 0.8 ······ 0

    8、0.8 × 2 = 1.6 ······ 1  ,  1.6 去除整数部分为 0.6

    ……

            我们发现,上面的数陷入了循环,因此 将十进制小数 0.1 转换成二进制 的结果就是:

            0.0 0011 0011 0011 0011 0011 ……

            也就是 0.0011 (0011)循环。

    3、整小混合

            方法:结合上面的 整数部分 和 小数部分 ,分开计算,再相加。


    五、程序实现

            有了上面各种方法,于是程序实现就很简单了。

    1、十进制 转 其它进制

            现有一个十进制数 N (0 ≤ N ≤ 10^6),要将它转换成 M ( 2 ≤ M ≤ 16)进制。

            输入样例:

    666.5 16

            输出样例:

    29A.8

             程序很简单:

            程序已加密,请自行破解。破解方法暂时不提供!

            其实代码很简单,懂得了方法,代码实现就不难了。

            无非就是一个 字符串、数值处理 罢了。

            这里 不 提供代码,只是因为现在直接复制粘贴的人太多了,所以希望大家可以自己打一下!

            也是为了您好!

    2、其他进制 转 十进制

            现有一个 M ( 2 ≤ M ≤ 16)进制数 N (0 ≤ N的十进制 ≤ 10^6),要将它转换成十进制。

            输入样例:

    16 29A.8

            输出样例:

    666.5

            程序也很简单:

     

             程序已加密,请自行破解。破解方法暂时不提供!

            其实代码很简单,懂得了方法,代码实现就不难了。

            无非就是一个 字符串、数值处理 罢了。

            这里 不 提供代码,只是因为现在直接复制粘贴的人太多了,所以希望大家可以自己打一下!

            也是为了您好!

    3、N 进制转 M 进制

            现有一个 N ( 2 ≤ N ≤ 16)进制数 A (0 ≤ A的十进制 ≤ 10^6),要将它转换成M( 2 ≤ M ≤ 16)进制。

                   输入样例:

    16  29A.8  2

            输出样例:

    1010011010.1

            程序还是很简单:

     

            程序已加密,请自行破解。破解方法暂时不提供!

            其实代码很简单,懂得了方法,代码实现就不难了。

            无非就是一个 字符串、数值处理 罢了。

            这里 不 提供代码,只是因为现在直接复制粘贴的人太多了,所以希望大家可以自己打一下!

            也是为了您好!

    六、大结局

            这里可能会有人不满意,为什么不给我们程序?

            其实这也是为了大家好,如果大家只会抄代码的话,那样真正考试的时候就会写不出来,造成悲剧……  再说,我不是把程序给出来了吗?

            看在我为大家好的份上,点个赞再走吧!又不废什么事,还可以增加原力!

            全文完结!!

            文章的最最最最最后,再次感谢大家对小天狼星的支持,我将会推出更多优质文章,谢谢!

  • 相关阅读:
    【IMX6ULL学习笔记之驱动学习02】LED字符设备驱动
    您的 IT 基础架构是否已为企业内容管理(ECM)软件做好准备?
    吴恩达:如何系统学习机器学习?
    (防坑)Alphafold 非docker 安装指南
    顺丰面试,第二个问题把我劝退了!
    【React源码】(六)React 中的优先级管理
    【面试经典150 | 哈希表】同构字符串
    关于埋点上报
    最新版SpringBoot整合Mybatis,实现增删改查(CRUD)
    音频采集的相关基础知识
  • 原文地址:https://blog.csdn.net/DUXS11/article/details/127829559