目录

    • 方法一:使用标准库函数`std::bitset`
    • 方法二:使用`std::bitset`的`to_string`方法
    • 方法三:手动实现除2取余法
    • 方法四:使用位运算
    • 方法五:使用递归

在C++中,将一个十进制数转换为二进制数有多种方法。以下是几种常见的方法,包括它们的思路和代码示例,以及代码含义的解释:

方法一:使用标准库函数std::bitset

思路:C++标准库提供了std::bitset类,可以方便地将十进制数转换为二进制表示。

示例代码

#include <iostream>
#include <bitset>

int main() {
    int num = 42;
    std::bitset<32> binary(num); // 将十进制数转换为二进制,这里假设32位
    std::cout << "Binary representation of " << num << " is " << binary << std::endl;
    return 0;
}

代码含义解释

  • #include <bitset>:包含标准库bitset头文件。
  • std::bitset<32> binary(num):创建一个bitset对象,大小为32位,并将十进制数num转换为二进制。
  • std::cout:输出二进制表示。

方法二:使用std::bitsetto_string方法

思路std::bitsetto_string方法可以直接将十进制数转换为二进制字符串,而不需要指定大小。

示例代码

#include <iostream>
#include <bitset>

int main() {
    int num = 42;
    std::string binary = std::bitset<32>(num).to_string(); // 转换为二进制字符串
    // 移除前导的0
    auto firstOne = binary.find('1');
    if (firstOne != std::string::npos) {
        binary = binary.substr(firstOne);
    }
    std::cout << "Binary representation of " << num << " is " << binary << std::endl;
    return 0;
}

代码含义解释

  • std::bitset<32>(num).to_string():将十进制数num转换为二进制字符串。
  • binary.find('1'):找到第一个1的位置。
  • binary.substr(firstOne):从第一个1开始截取字符串,移除前导的0。

方法三:手动实现除2取余法

思路:通过不断地将十进制数除以2,取余数,然后将余数逆序排列,得到二进制表示。

示例代码

#include <iostream>
#include <stack>

std::string decimalToBinary(int num) {
    std::stack<int> binaryStack; // 使用栈存储余数
    while (num > 0) {
        binaryStack.push(num % 2); // 将余数压入栈
        num /= 2; // 更新num为商
    }
    std::string binary;
    while (!binaryStack.empty()) {
        binary += std::to_string(binaryStack.top()); // 将栈顶元素转换为字符串并拼接
        binaryStack.pop(); // 弹出栈顶元素
    }
    return binary.empty() ? "0" : binary; // 如果结果为空,返回"0"
}

int main() {
    int num = 42;
    std::string binary = decimalToBinary(num);
    std::cout << "Binary representation of " << num << " is " << binary << std::endl;
    return 0;
}

代码含义解释

  • std::stack<int> binaryStack:创建一个栈来存储余数。
  • while (num > 0):当num大于0时,继续循环。
  • binaryStack.push(num % 2):将num除以2的余数压入栈。
  • num /= 2:更新num为商。
  • while (!binaryStack.empty()):当栈不为空时,继续循环。
  • binary += std::to_string(binaryStack.top()):将栈顶元素转换为字符串并拼接到结果中。
  • binaryStack.pop():弹出栈顶元素。
  • binary.empty() ? "0" : binary:如果结果为空,返回"0"

方法四:使用位运算

思路:通过位运算,逐位提取二进制表示。

示例代码

#include <iostream>
#include <string>

std::string decimalToBinary(int num) {
    if (num == 0) return "0"; // 特殊情况处理
    std::string binary;
    while (num > 0) {
        binary = (num & 1 ? "1" : "0") + binary; // 使用位运算提取最低位,并拼接到结果前面
        num >>= 1; // 右移一位
    }
    return binary;
}

int main() {
    int num = 42;
    std::string binary = decimalToBinary(num);
    std::cout << "Binary representation of " << num << " is " << binary << std::endl;
    return 0;
}

代码含义解释

  • if (num == 0) return "0":处理特殊情况,如果num为0,直接返回"0"
  • while (num > 0):当num大于0时,继续循环。
  • num & 1 ? "1" : "0":使用位运算&提取最低位。
  • binary = (num & 1 ? "1" : "0") + binary:将提取的位拼接到结果字符串的前面。
  • num >>= 1:将num右移一位。

方法五:使用递归

思路:通过递归的方式,将十进制数除以2,取余数,然后对商继续递归,直到商为0。

示例代码

#include <iostream>
#include <string>

std::string decimalToBinary(int num) {
    if (num == 0) return ""; // 递归终止条件
    return decimalToBinary(num / 2) + std::to_string(num % 2); // 递归调用并拼接余数
}

int main() {
    int num = 42;
    std::string binary = decimalToBinary(num);
    std::cout << "Binary representation of " << num << " is " << binary.empty() ? "0" : binary << std::endl;
    return 0;
}

代码含义解释

  • if (num == 0) return "":递归终止条件,如果num为0,返回空字符串。
  • decimalToBinary(num / 2):递归调用函数,处理商。
  • std::to_string(num % 2):将余数转换为字符串。
  • binary.empty() ? "0" : binary:如果结果为空,返回"0"

以上是C++中将十进制数转换为二进制数的几种常见方法。每种方法都有其适用场景和优缺点。在实际开发中,可以根据具体需求选择合适的方法。

更多推荐