C++实现十进制整数转二进制:处理负数与格式化输出

周叙
周叙
发布时间:2026-10-14 | 3人浏览过
原创

本教程介绍在C++中将十进制整数(包括负数)转换为二进制表示的方法,重点解决如何保留负号并按指定宽度(如11位)右对齐输出的问题。

实现逻辑与核心步骤

将十进制数转换为二进制的核心在于“除2取余法”。对于每个整数,持续对其除以2并记录余数,直到商为0为止。由于得到的二进制序列是低位在前、高位在后(反向),需要将其反转才能成为正确的二进制字符串。

第一步:处理零值特殊情况

C++的while循环条件n!=0会自动跳过零值的处理,因此需要先单独判断。若输入为0,直接输出对应的二进制字符串"0"即可,无需进入循环。

第二步:循环取余构建二进制串

使用一个临时变量保存当前数值,循环中通过a % 2判断奇偶性来确定当前位的值是'1'还是'0',并将其追加到结果字符串中。随后通过a = a / 2缩小数值进行下一轮计算。

代码如下:
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>

using namespace std;

string resultStr;
int main() {
    int n;
    while(cin >> n) {
        // ... (后续代码见完整实现)
    }
    return 0;
}

第三步:反转字符串

上述步骤拼接出的字符串是逆序的。调用<algorithm>头文件中的reverse()函数,对字符串的首尾指针进行逆置操作,即可得到正确的二进制序列。

第四步:负数符号分离与格式化输出

二进制通常以正数形式呈现,负号需单独处理。判断原数是否小于0,若小于0则在中间插入"-"。 为了满足“以11位的宽度右对齐”的要求,使用cout.width(11)设置下一个字段的输出宽度,再依次输出原数、连接符和二进制字符串。

完整可运行代码示例

以下代码整合了上述所有步骤,能够处理不超过50个整数的批量输入,并严格遵循指定的格式输出:

复制代码
#include 
#include 
#include 
#include 

using namespace std;

string s;
int main() {
    int n;
    while(cin >> n) {
        if(n == 0) {
            // 特殊处理0:前导空格+0 + -->0 
            cout << "           0-->0\n";
            continue;
        }
        
        // 初始化空串
        s = " ";
        
        // 核心转换逻辑:除2取余
        int tempN = (n < 0 ? -n : n); // 暂时转为绝对值处理
        
        for(int a = tempN; a; a = a / 2) {
            s = s + (a % 2 ? '1' : '0');
        }
        
        // 逆置得到正确顺序的二进制串
        reverse(s.begin(), s.end());
        
        const char *sss = s.c_str();
        
        // 格式化输出:11位右对齐 + 分隔符 + 二进制串
        // 注意:负数需在二进制前加'-',且不占位
        if (n < 0) {
             cout.width(11);
             cout << n << "-->-" << sss << "\n";
        } else {
             cout.width(11);
             cout << n << "-->" << sss << "\n";
        }
    }
    return 0;
}

运行效果验证

按照题目要求的格式,输入不同数值后,程序会在终端产生如下对齐效果的输出:

总结

以上就是C++处理十进制转二进制及格式化输出的详细内容。该实现利用了标准库的reverse功能简化了位运算的逻辑复杂度,非常适合用于理解基础的进制转换算法与控制台输出格式化技巧。更多关于C++底层原理的资料请关注本站其它相关文章!

相关标签:

本站声明

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

Python 相关产品和应用

全部下载

专题列表