c ++十进制到二进制

时间:2016-09-30 04:14:39

标签: c++ binary

我是一个以c ++开头的初学者,我试图将十进制字节转换为二进制数。但是,我的语法或逻辑有问题,但我无法弄清楚。在尝试调试时,我认为错误是在userValue5周围,但我不知道为什么。任何提示都表示赞赏,我正在使用VS2015。

    #include "stdafx.h"
    #include <iostream>
    #include <stdint.h>
    #include <cmath>

     //finds where each column is a 0 or a 1
    int binaryDigit(uint16_t y, uint16_t power)
    {
    if ((y / (pow(2, power))) > 1)
    return 1;
    else
    return 0;
    }

    int difference(uint16_t y, int x, uint16_t power)
    {
    if (x == 1)
    return y - pow(2, power);
    else
    return y;
    }

    //takes a decimal byte and turns it into binary
    int main()
    {
    using namespace std;
    cout << "Please insert a number between 0 and 255 so that I can convert it to binary: ";
    uint16_t userValue(0), power(7);
    cin >> userValue;

    int firstDigit = binaryDigit(userValue, power);
    uint16_t userValue2 = difference(userValue, firstDigit, power);
    --power;

    int secondDigit = binaryDigit(userValue2, power);
    uint16_t userValue3 = difference(userValue2, secondDigit, power);
    --power;

    int thirdDigit = binaryDigit(userValue3, power);
    uint16_t userValue4 = difference(userValue3, thirdDigit, power);
    --power;

    int fourthDigit = binaryDigit(userValue4, power);
    uint16_t userValue5 = difference(userValue4, thirdDigit, power);
    --power;

    int fifthDigit = binaryDigit(userValue5, power);
    uint16_t userValue6 = difference(userValue5, thirdDigit, power);
    --power;

    int sixthDigit = binaryDigit(userValue6, power);
    uint16_t userValue7 = difference(userValue6, thirdDigit, power);
    --power;

    int seventhDigit = binaryDigit(userValue7, power);
    uint16_t userValue8 = difference(userValue7, thirdDigit, power);
    --power;

    int eigthDigit = binaryDigit(userValue8, power);


    cout << "The number " << userValue << " in binary is ";
    cout << firstDigit << secondDigit << thirdDigit << fourthDigit << " " << fifthDigit << sixthDigit << seventhDigit << eigthDigit << endl;


    return 0;
    }

3 个答案:

答案 0 :(得分:2)

bitset是你的朋友。

#include <bitset>
#include <iostream>

using namespace std;

int main()
{
    int userValue = 0;

    cout << "Please insert a number between " << INT_MIN << " and " << INT_MAX << " so that I can convert it to binary: ";
    cin >> userValue;

    cout << bitset<32>(userValue) << endl;

    return 0;
}

答案 1 :(得分:1)

我明白了。当我复制并粘贴相同的代码以节省时间时,我忘记编辑参数,这就是为什么它不能正常工作。我修好了它,效果很好。感谢所有评论和发布指数表和位屏蔽等内容的人。我学到了很多东西,迫不及待想要写更多的程序。

答案 2 :(得分:0)

bitset是要走的路,但总的来说,这可能更有帮助......

std::string intToBinaryString(int x)
{
    // a useful class that allows easy concatenation
    std::stringstream ss;


    // create an integer that only has a 1 bit in its top position.
    unsigned int mask = 1 << (sizeof(int) * 8 - 1);

    // for each bit in x, starting at the top, check to see if its non zero...

    for(int i = 0; i <sizeof(int) * 8; ++i)
    {
        // see if x's (top - i)'th bit is non zero
        bool nonZeroBit = x & mask;

        // assign the (top - i)'th "bit" of ss to be '1' if non zero and '0' otherwise
        ss <<  (nonZeroBit ? '1' : '0');

        // shift the mask down by 1.
        mask >>= 1;
    }

    // What we get on the first iteration is
    //
    //    mask   =   10000...0000
    //  &    x   =   10101...0010
    //  -----------------------------
    // nonZero   =   10000...0000 = true
    //
    // the second iteration is 
    //
    //    mask   =   01000...0000
    //  &    x   =   10101...0010
    //  -----------------------------
    // nonZero   =   00000...0000 = false
    //
    // the third iteration is 
    //
    //    mask   =   00100...0000
    //  &    x   =   10101...0010
    //  -----------------------------
    // nonZero   =   00100...0000 = true
    //
    // ...
    //
    // then we just add these results into ss 

    // finally, convert it into a normal string
    return ss.str();
}
相关问题