1

私自身が大好きなので、この C コードの背後にあるロジックを理解することはできません。

おそらく、以下は unsigned char x のバイナリ表現を出力するはずであり、空白を埋めることだけが許可されています。

void print_binary(unsigned char x) {
    int b = 128;

    while (__________________) {

        if (b <= x) {
            x -= b;
            printf("1");
        } else
            printf("0");

        ______________________;
    }
}

もちろん、上記の行を無視するだけでプログラムを操作できます。しかし、これは実際には物事を行う方法ではないという印象を受けています (ハックのようなものです)。

つまり、最初の条件は 128 が <= char であるかどうかをチェックしますが、unsigned char ではなく、255 バイトですか? では、なぜ「1」しか印刷されないのでしょうか。

おそらく、私は非常に明白な何か(実際にはACプログラマーではない)を見逃していますが、今回はロジックが私に浸透していません.

誰かが私を正しい方向に向けることができますか? そして、答えを完全に言わずに手がかりを与えることができれば、それは素晴らしいことです.

4

3 に答える 3

3
void print_binary(unsigned char x) {
    int b = 128;

    while (b != 0) {

        if (b <= x) {
            x -= b;
            printf("1");
        } else
            printf("0");

        b = b >> 1;
    }
}

b のバイナリ表現は です10000000。実行b >> 1してチェックb <= xすることで、各ビットx1orであることを確認でき0ます。

于 2013-09-02T06:34:46.630 に答える
1

手がかりだけが必要でした。現在のビットの値は、その後の重要度の低いビットの組み合わせよりも常に大きくなります。したがって、コードはループの各反復で最上位の「1」ビットのみをテストしようとします。

于 2013-09-02T06:50:00.597 に答える