C++ 使用短除法实现十进制转二进制
介绍C++中使用短除法进行十进制到二进制转换的数学算法及代码实现,解析余数累加原理与完整流程。
十进制转换为二进制的数学原理
将十进制数转换为二进制数的核心方法是“短除法”。具体操作如下:
- 除2取余:将目标十进制数
n除以 2,记录得到的商和余数。 - 循环迭代:将上一步得到的商作为新的被除数,继续除以 2,直到商为 0 为止。
- 逆序排列:将所有步骤中产生的余数从最后一步到第一步依次排列,即为对应的二进制数。
以下图展示了具体的转换过程:
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++十进制转二进制的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









