c++十进制小数转换成二进制数
时间: 2024-09-25 14:02:05 浏览: 77
在C++中,将十进制小数转换为二进制数可以使用内置库函数`bitset`或者手动通过数学方法进行转换。这里提供两种常见的方法:
1. **使用bitset库**:
```cpp
#include <bitset>
std::string decimal_to_binary(double num) {
std::stringstream ss;
ss << std::setprecision(20) << num; // 设置精度以保留更多小数位
std::string str = ss.str();
int binary_str_length = str.find('.') + 1 + std::stoll(str.substr(str.find('.')+1)); // 获取整数部分长度
std::bitset<64> binary(binary_str_length); // 假设最多32位二进制,加上整数和小数点共64位
binary.setf(std::ios::right);
binary <<= (64 - binary_str_length); // 向左填充0到适当位置
binary >>= (binary.find_first_not_of('0') - 1); // 移动小数点
return binary.to_string();
}
```
2. **手动转换**:
如果不想依赖库函数,可以手动计算每一位二进制值。先处理整数部分,然后处理小数部分。
```cpp
std::string decimal_to_binary(double num) {
std::ostringstream oss;
int integer_part = static_cast<int>(num);
double fractional_part = num - integer_part;
oss << integer_part;
while (fractional_part > 0 && fractional_part != 0.5) {
fractional_part *= 2;
if (fractional_part >= 1) {
oss << '1';
fractional_part -= 1;
} else {
oss << '0';
}
}
if (fractional_part == 0.5) {
oss << '1';
}
return oss.str();
}
```
阅读全文