マイナス記号は何をしましたか.

1106 ワード

1.1と-1はメモリにどのように表示されますか?
2.数にマイナス記号を付けるとメモリでどのように変化しますか?
3.一つの練習が引き起こす思考.
まず、charをバイナリ表現に変換するための小さなツールを導入します.
static void n2(unsigned char c) {
    int i;
    for (i = 0; i < 8; i++) {
        if (128 & c)
            putchar('1');
        else
            putchar('0');
        c <<= 1;
    }   
    printf("
"); }

使用方法:
n2(1);
n2(-1);

出力:
 1:00000001
-1:11111111

さらに数を印刷します.
 3:00000011
-3:11111101
 4:00000100
-4:11111100

新しい発見:
1のバイナリ表示は00000001で、逆:11111111110、プラス1:11111111、等しい:-1:1111111111
3のバイナリ表現は0000011で、逆:11111111100、プラス1:11111101、等しい:-3:1111101
4のバイナリ表現は00000100で、逆:11111011、プラス1:11111100、等しい:-4:1111111100
大胆に結論を出して、マイナス記号の作用はメモリのバイナリビットに対して逆プラス1を取ることです.
どうして上の考えがあるの?
signed charの最小値を求める問題を解くからだ.
本人の書き方は(char)((unsigned char)~0>>1)+1)
本の答えは-(char)(unsigned char)~0>>1)
答えがどうしてそんなに書いたのかずっと分からない.最後に答えが間違っていることに気づいた.
そのタイトルは