【C++练习】16.C++将一个十进制转换为二进制
·
目录
-
- 方法一:使用标准库函数`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::bitset的to_string方法
思路:std::bitset的to_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++中将十进制数转换为二进制数的几种常见方法。每种方法都有其适用场景和优缺点。在实际开发中,可以根据具体需求选择合适的方法。
更多推荐

所有评论(0)