c++中怎么样用>>重载可以输入二进制数

求解答

c++中怎么样用>>重载可以输入二进制数

a
1001
a = 1001

a为定义的bool型数组

直接输入数组不好确定输入的长度。推荐用结构体的方式。


#include <iostream>
using namespace std;

typedef struct bin
{
    bool data[64];
    int len;

} Bin;

istream &operator>>(istream &is, bool *b)
{
    char n;
    int i = 0, len = 0, j, k;
    bool *a = b;
    while (len < 8)
    {
        n = is.get();
        if (n > '1' || n < '0')
            break;

        *a++ = n - '0';
        len++;
    }
    //输入内容后移
    k = 8 - len;
    for (i = len - 1; i >= 0; i--)
        b[i + k] = b[i];

    //高位补零
    for (i = k - 1; i >= 0; i--)
        b[i] = 0;

    return is;
}

istream &operator>>(istream &is, Bin &a)
{
    char n;
    a.len = 0;
    while (a.len < 64)
    {
        n = is.get();
        if (n > '1' || n < '0')
            break;

        a.data[a.len] = n - '0';
        a.len++;
    }

    return is;
}

int main()
{
    bool *a = new bool[8]{0};
    cin >> a;
    for (int i = 0; i < 8; i++)
        cout << a[i];
    cout << endl;

    Bin bin;
    cin >> bin;
    for (int i = 0; i < bin.len; i++)
        cout << bin.data[i];

    return 0;
}