文章

【GESP】C++三级考试大纲知识点梳理, (2)数据的进制转换

GESP C++三级官方考试大纲中,共有8条考点,本文针对C++(2)号知识点进行总结梳理。

(2)掌握数据的进制转换:二进制、八进制、十进制、十六进制。

计算机中的数据以不同的进制表示。以下是对二进制、八进制、十进制和十六进制的详细介绍及其相互转换的方法。

一、各进制的定义与特点

(一) 二进制(Binary)

  • 基数: 2
  • 符号: 01
  • 特点:
    • 是计算机系统的基础语言。
    • 易于通过物理电路(高低电平)实现。
  • 权值分布: 从右到左,每一位的权值为 $(2^n)$ $(n从0开始)$。

示例: 二进制数 1011 表示 $(1 \times 2^3 + 0 \times 2^2 + 1 \times 2^1 + 1 \times 2^0 = 11)$(十进制)。

(二) 八进制(Octal)

  • 基数: 8
  • 符号: 0, 1, 2, 3, 4, 5, 6, 7
  • 特点:
    • 是二进制的简化表示,每3个二进制位对应1个八进制位。
  • 权值分布: 从右到左,每一位的权值为 $(8^n) (n从0开始)$。

示例: 八进制数 17 表示 $(1 \times 8^1 + 7 \times 8^0 = 15)$(十进制)。

(三) 十进制(Decimal)

  • 基数: 10
  • 符号: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
  • 特点:
    • 是人类日常使用的数字系统。
    • 对应权值为 $(10^n)$。

示例: 十进制数 156 表示 $(1 \times 10^2 + 5 \times 10^1 + 6 \times 10^0 = 156)$。

(四) 十六进制(Hexadecimal)

  • 基数: 16
  • 符号: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, FA~F 对应 10~15)
  • 特点:
    • 是二进制的简化表示,每4个二进制位对应1个十六进制位。
  • 权值分布: 从右到左,每一位的权值为 $(16^n) (n从0开始)$。

示例: 十六进制数 1F 表示 $(1 \times 16^1 + 15 \times 16^0 = 31)$(十进制)。


二、 进制之间的转换

(一) 二进制与十进制转换

  • 二进制转十进制:
    • 按位展开,乘以对应的 $(2^n)$,求和。
    • 示例:1011 转十进制
      $(1 \times 2^3 + 0 \times 2^2 + 1 \times 2^1 + 1 \times 2^0 = 11)$。
  • 十进制转二进制:
    • 使用“除2取余法”,逆序排列余数。
    • 示例:$(11)$ 转二进制
      $(11 \div 2 = 5)$ 余 $(1)$
      $(5 \div 2 = 2)$ 余 $(1)$
      $(2 \div 2 = 1)$ 余 $(0)$
      $(1 \div 2 = 0)$ 余 $(1)$,结果:1011

(二) 二进制与八进制转换

  • 二进制转八进制:
    • 每3位一组(从右到左),不足补0,按组计算。
    • 示例:110101 转八进制
      分组:110 101,分别计算:65,结果:65
  • 八进制转二进制:
    • 每个八进制位转换为3位二进制。
    • 示例:65 转二进制
      6 转二进制为 1105 转二进制为 101,结果:110101

(三) 二进制与十六进制转换

  • 二进制转十六进制:
    • 每4位一组(从右到左),不足补0,按组计算。
    • 示例:11010111 转十六进制
      分组:1101 0111,分别计算:D7,结果:D7
  • 十六进制转二进制:
    • 每个十六进制位转换为4位二进制。
    • 示例:D7 转二进制
      D 转二进制为 11017 转二进制为 0111,结果:11010111

(四) 十进制与八进制转换

  • 十进制转八进制:
    • 使用“除8取余法”,逆序排列余数。
    • 示例:$(156)$ 转八进制
      $(156 \div 8 = 19)$ 余 $(4)$
      $(19 \div 8 = 2)$ 余 $(3)$
      $(2 \div 8 = 0)$ 余 $(2)$,结果:234
  • 八进制转十进制:
    • 按位展开,乘以对应的 $(8^n)$,求和。
    • 示例:234 转十进制
      $(2 \times 8^2 + 3 \times 8^1 + 4 \times 8^0 = 156)$。

(五) 十进制与十六进制转换

  • 十进制转十六进制:
    • 使用“除16取余法”,逆序排列余数。
    • 示例:$(254)$ 转十六进制
      $(254 \div 16 = 15)$ 余 $(14 (E))$
      $(15 \div 16 = 0)$ 余 $(15 (F))$,结果:FE
  • 十六进制转十进制:
    • 按位展开,乘以对应的 $(16^n)$,求和。
    • 示例:FE 转十进制
      $(15 \times 16^1 + 14 \times 16^0 = 254)$。

(六) 八进制与十六进制转换

  • 八进制转十六进制:
    • 先将八进制转换为二进制,再将二进制转换为十六进制。
    • 示例:65(八进制) → 110101(二进制) → 35(十六进制)。
  • 十六进制转八进制:
    • 先将十六进制转换为二进制,再将二进制转换为八进制。
    • 示例:2F(十六进制) → 00101111(二进制) → 57(八进制)。

三、总结

转换方向方法
二进制 → 十进制按位展开,乘以对应的 $(2^n)$,求和。
十进制 → 二进制除2取余法,逆序排列。
二进制 → 八进制每3位一组,不足补0,按组计算。
八进制 → 二进制每个八进制位转换为3位二进制。
二进制 → 十六进制每4位一组,不足补0,按组计算。
十六进制 → 二进制每个十六进制位转换为4位二进制。
十进制 → 八进制除8取余法,逆序排列。
八进制 → 十进制按位展开,乘以对应的 $(8^n)$,求和。
十进制 → 十六进制除16取余法,逆序排列。
十六进制 → 十进制按位展开,乘以对应的 $(16^n)$,求和。

这些进制之间的转换是计算机科学中的基础知识,广泛用于计算机编程、网络通信和硬件设计等领域。


所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页

luogu-”系列题目已加入洛谷Java、C++初学团队作业清单,可在线评测,团队名额有限,欢迎加入。

bcqm-”系列题目可在编程启蒙题库进行在线评测。

本文由作者按照 CC BY 4.0 进行授权