C++ 使用短除法实现十进制转二进制

不晚
不晚
发布时间:2026-10-16 | 3人浏览过
原创

介绍C++中使用短除法进行十进制到二进制转换的数学算法及代码实现,解析余数累加原理与完整流程。

十进制转换为二进制的数学原理

将十进制数转换为二进制数的核心方法是“短除法”。具体操作如下:

  1. 除2取余:将目标十进制数 n 除以 2,记录得到的商和余数。
  2. 循环迭代:将上一步得到的商作为新的被除数,继续除以 2,直到商为 0 为止。
  3. 逆序排列:将所有步骤中产生的余数从最后一步到第一步依次排列,即为对应的二进制数。

以下图展示了具体的转换过程:

C++ 代码实现

第1步:设计核心转换函数

为了实现上述过程,我们定义一个名为 transfer 的函数。由于在计算机中直接按位拼接字符串或数组较为常见,本例采用一种基于数值运算的方法:将每次得到的余数按权值累加到一个变量中,从而以十进制整数的形式呈现“看起来像”二进制串的结果(例如二进制 1101 存为整数值 1101)。

  • 参数说明:n 为待转换的十进制整数。
  • 局部变量:
    • flag:位数控制器,初始值为 1,用于指示当前余数应乘以的权重(1, 10, 100...)。
    • y:累计结果,初始值为 0,用于存储最终的“伪二进制”数值。
    • remainder:临时存储每次除以 2 的余数。

执行流程演示(以十进制 13 为例):

// 初始状态: n=13, flag=1, y=0
1. remainder = 13 % 2 = 1; n = 13 / 2 = 6;
   y = 0 + 1 * 1 = 1;
   flag = 1 * 10 = 10;

2. remainder = 6 % 2 = 0; n = 6 / 2 = 3;
   y = 1 + 0 * 10 = 1;
   flag = 10 * 10 = 100;

3. remainder = 3 % 2 = 1; n = 3 / 2 = 1;
   y = 1 + 1 * 100 = 101;
   flag = 100 * 10 = 1000;

4. remainder = 1 % 2 = 1; n = 1 / 2 = 0;
   y = 101 + 1 * 1000 = 1101;
   flag = 1000 * 10 = 10000;

// 此时 n=0,循环结束,返回 y (即 1101)

第2步:编写完整可运行代码

以下是包含主函数调用及核心逻辑的完整 C++ 源代码。注意修正了原草稿中存在的变量名拼写错误(如 x 应为 n),确保代码可直接编译运行。

#include <cstdio>
#include <iostream>
using namespace std;

// 转换函数:将十进制转换为以十进制形式显示的“二进制”数值
int transfer(int n) {
    int flag = 1, y = 0, remainder;
    while (1) {
        remainder = n % 2; // 获取余数
        n /= 2;            // 更新商
        y += remainder * flag; // 累加权值
        flag *= 10;        // 位数左移
        if (n == 0) {
            break;         // 商为0时停止
        }
    }
    return y;
}

int main() {
    int n, y;
    printf("请输入一个十进制整数: ");
    scanf("%d", &n);
    
    y = transfer(n);
    printf("转换结果为: %d\n", y);
    
    return 0;
}

总结

该算法的核心思想是从最低位到最高位处理每一位余数,通过位数控制器 flag 将余数分别乘以 $10^0, 10^1, 10^2...$ 并累加。虽然最终结果 y 在内存中是以十进制整数形式存储的(例如 1101),但其各位数字恰好对应了二进制位的值。这种方法直观地体现了“除2取余,逆序排列”的数学规则,适合初学者理解进制转换的底层逻辑。

以上就是C++实现十进制数转换为二进制数的详细内容,更多关于C++十进制转二进制的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表