进制转换专题

1.进制基本概念

  • 基数:进位计数制中所采用的数码(数制中用来表示“量”的符号)的个数。如十进制的基数为 10,含 0 ~ 9 十个数字

  • 位权:进位制中每一固定位置对应的单位值。如十进制的个位位权为 10^0(1) 、十位位权为 10^1(10)、 百位位权为 10^2(100),以此类推

2.进制分类

  • 十进制:生活中最常用的进制,满十进一,包含数字 0 ~ 9。任意的十进制数拆开都是由这十个基数构成

  • 八进制:C语言中以 0 开头,满八进一,包含数字 0 ~ 7。任意的八进制数拆开都是由这八个基数构成

  • 十六进制:C语言中以 0x 或 0X 开头,包含数字 0 ~ 9、 字母 A ~ F 或 a ~ f; A/a 代表数字 10,F/f 代表数字15。任意的十六进制数拆分开都是由这十六个基数构成

    • 用字母代替 10 ~ 15 可避免歧义,如 0X931087中的10,如果不引入字母的话,不确定是看作十还是一和零

3.二/八/十六进制转十进制

  • 拆分十进制数:从十进制数的拆分出发,对比得到其他进制转为十进制的方法。
# 每一位的数与该位位权相乘后相加求和
2354 = 2 * 10^3 + 3 * 10^2 + 5 * 10^1 + 4 * 10^0 = 2354
  • 拆分二进制
# 二进制数只有0和1两种数字组成
# 二进制数每一位的位权为2^n
(1100)2 = 1 * 2^3 + 1 * 2^2 + 0 * 2^1 + 0 * 2^0 = 12
  • 转换方法
    • 对于形式化的进制表示可以从 0 开始,对数字的各个数位进行编号,即个位起往左依次为编号 0,1,2,……;对称的,从小数点后的数位则是 -1,-2,……

    • 十进制数 110,其中百位上的1表示 1 个 10^2, 即 100,十位的 1 表示 1 个 10^1, 即 10,个位的 0 表示 0 个10^0,即 0

    • 二进制数 110,其中高位的 1 表示 1 个 2^2, 即 4,低位的 1 表示 1 个 2^1, 即 2,最低位的 0 表示 0 个2^0,即 0

    • 十六进制数 110,其中高位的 1 表示 1 个 16^2, 即 256,低位的 1 表示 1 个 16^1, 即 16,最低位的 0 表示 0 个 16^0,即 0

  • 总结
    • 在数制中,各位数字所表示值的大小不仅与该数字本身的大小有关,还与该数字所在的位置有关,这种关系称为数的位权

    • 十进制数的位权是以 10 为底的幂,二进制数的位权是以 2 为底的幂,十六进制数的位权是以 16 为底的幂。数位由高向低,以降幂的方式排列

    • 无论是二进制、八进制还是十六进制,各位上的位权与该位上的数相乘,最后再相加得到的和就是它转为十进制的结果

4.十进制转为二/八/十六进制

  • 方法1(基础方法):短除法,除到商为0截止;余数要倒序相连

    • 注意:十进制转为多少进制,除数就是多少(除二取余 除八取余 除十六取余)
    • 案例

  • 方法2(进阶方法)

    • 原理:二进制转十进制是由若干个 2 的整数次幂相加得到的,那反过来,十进制转为二进制可以拆分为若干个2的整数次幂的和

    • 必备:2 的 0 到 10 的幂次方

    • 案例

    // 计算十进制数345的二进制数
    // 离345最近的是256 345 - 256 = 89
    // 离89最近的64 89 - 64 = 25 
    // 离25最近的16 25 - 16 = 9
    // 离9最近的8 9 - 8 = 1
    // 所以345 = 256 + 64 + 16 + 8 + 1 
    // 1、2、4、8、16、32、64、128、256、512 、1024中用到的写1,未用到的写0
    // 即1(1)、 2(0)、4(0)、8(1)、16(1)、32(0)、64(1)、128(0)、 256(1)、 512(0) 、1024(0)
    // 然后从后往前把括号里的数据读出来:0010 1011 001 省去无用的0,即101011001
    // ====================或者=========================
    // 345 = 256 + 64 + 16 + 8 + 1 = 2^8 + 2^6 + 2^4 + 2^3 + 2^0
    // = 1 * 2^8 + 0 * 2^7 + 1 * 2^6 + 0 * 2^5 + 1 * 2^4 + 1 * 2^3 + 0 * 2^2 + 0 * 2^1 + 1 * 2^0
    // 上式中与2的整数次幂相乘的1或0就是代表整数次幂的位权上的1或0,将2^8到2^0左边的0或1从左往右
    // 排列依然是 101011001
    
posted @ 2025-05-19 08:45  pycoder_666  阅读(228)  评论(0)    收藏  举报