1
#include<stdio.h>
int main()
{
    struct value
    {
    int bit1:1;
    int bit3:4;
    int bit4:4;
    }bit={1,8,15};
    printf("%d%d%d",bit.bit1,bit.bit3,bit.bit4);
    return 0;
}

出力は次のとおりです: -1-8-1

符号なしビットが原因であることはわかっていますが、詳しく説明してください。なぜ 8 が -8 を出力し、15 が -1 を出力するのかがわかりません。

4

2 に答える 2

4
int bit4:4;

署名されているため、範囲は [-8..7] です。15 に設定すると、0b1111 と同じになります。これは、2 の補数を仮定すると -1 に相当します。

同様にbit3、8 は 0b1000 に相当します。一番上のビットは、これが負の値であることを示しています。他のビットを反転してから 1 を追加すると、-8 になります。

値 [8..15] を保存する場合は、5 ビットの符号付きの値が必要か、型を次のように変更する必要があります。unsigned int

于 2013-08-30T12:07:48.713 に答える