美文网首页
C++十进制小数转二进制

C++十进制小数转二进制

作者: Virtualer | 来源:发表于2020-05-02 11:09 被阅读0次

    之前经常接触的都是十进制整数转换二进制,记录一下十进制小数转化二进制的方法。
    小数分为整数区域和小数区域,以小数点相隔开。整数部分转化方式是对2取余除2的方法,而小数部分则是相反,对小数乘2取整数部分的方法:


    小数部分转化二进制(图片来自公众号:IT服务圈儿)

    根据这种方式就可以自己实现一个转化器,代码搞起来

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    string IntegerPart(const string &str)
    {
        string retStr;
        long temp = strtol(str.c_str(), nullptr, 10);
        while (temp) {
            retStr += to_string(temp % 2);
            temp /= 2;
        }
        return retStr.empty() ? "0" : retStr;
    }
    
    string DecimalPart(const string &str)
    {
        string retStr;
        float temp = strtof(str.c_str(), nullptr);
        while (temp != 0.0) {
            retStr += to_string((int) (temp * 2));
            string tempStr = to_string(temp * 2);
            tempStr[0] = '0';
            temp = strtof(tempStr.c_str(), nullptr);
        }
        return retStr;
    }
    
    int main(int argc, char** argv)
    {
        string inputStr;
        while (getline(cin, inputStr)) {
            size_t pos = inputStr.find('.');
            string integerStr;
            string decimalStr;
            if (pos == string::npos) {
                decimalStr = "";
                integerStr = IntegerPart(inputStr);
            } else {
                integerStr = inputStr.substr(0, inputStr.find('.'));
                decimalStr = inputStr.substr(inputStr.find('.') + 1, inputStr.size());
                integerStr = IntegerPart(integerStr);
                decimalStr = DecimalPart(string("0.") + decimalStr);
            }
            if (!decimalStr.empty()) {
                integerStr += ".";
                integerStr += decimalStr;
            }
            cout << integerStr << endl;
        }
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:C++十进制小数转二进制

          本文链接:https://www.haomeiwen.com/subject/hhxkghtx.html