-2

バイナリの 1 ~ 6 ビットを取り、文字列がまだ 6 でない場合は最上位ビットに 0 を詰め込み、XOR 演算を使用して 3 ビットの 2 つのパケットを比較するコードを作成する必要があります。XOR を実行しているときに 2 進数の 0 ではなく、整数の 0 を比較しているため、出力がおかしいと思います。

char binary[300];

cin >> binary;

int size = strlen(binary);
//cout << "Size: " << size << endl;

int a,b,c,d,e,f;

if(size == 1){
    a = 0;
    b = 0;
    c = 0;
    d = 0;
    e = 0;
    f = binary[0];

    cout << a^d << b^e << c^f << endl;
    return 0;
}

if(size == 2){
    a = 0;
    b = 0;
    c = 0;
    d = 0;
    e = binary[0];
    f = binary[1];

    cout << a^d << b^e << c^f << endl;
    return 0;
}

if (size == 3){
    a = 0;
    b = 0;
    c = 0;
    d = binary[0];
    e = binary[1];
    f = binary[2];

    cout << a^d << b^e << c^f << endl;
    return 0;
}

if (size == 4){
    a = 0;
    b = 0;
    c = binary[0];
    d = binary[1];
    e = binary[2];
    f = binary[3];

    cout << a^d << b^e << c^f << endl;
    return 0;
}

if (size == 5){
    a = 0;
    b = binary[0];
    c = binary[1];
    d = binary[2];
    e = binary[3];
    f = binary[4];

    cout << a^d << b^e << c^f << endl;
    return 0;
}

if (size == 6){
    a = binary[0];
    b = binary[1];
    c = binary[2];
    d = binary[3];
    e = binary[4];
    f = binary[5];

    cout << a^d << b^e << c^f << endl;
    return 0;
}
return 0;
4

1 に答える 1

0

あなたのコードはかなり悪いので、ここではよりクリーンなバージョンです。
ただコピーするのではなく、何が起こっているのかを理解するようにしてください。

std::string s;
std::cin >> s;
while(s.length() < 6)
    s = "0" + s;  
std::cout << (bool)(s[0] ^ s[3]);
std::cout << (bool)(s[1] ^ s[4]);
std::cout << (bool)(s[2] ^ s[5]);
于 2015-10-12T01:05:55.577 に答える