124

符号付き整数と符号なし整数の違いは何ですか?

4

5 に答える 5

151

おそらくご存じのとおり、ints はバイナリで内部的に格納されます。通常、intには 32 ビットが含まれますが、一部の環境では 16 ビットまたは 64 ビットが含まれる場合があります (または、通常は 2 のべき乗である必要はありません)。

しかし、この例では、4 ビット整数を見てみましょう。小さいですが、説明目的に役立ちます。

このような整数には 4 ビットあるため、16 の値のいずれかを取ることができます。16 は 2 の 4 乗、つまり 2 かける 2 かける 2 かける 2 です。これらの値は何ですか? 答えは、この整数が か かによって異なりsigned intますunsigned int。を使用するunsigned intと、値が負になることはありません。値に関連する記号はありません。4 ビットの 16 の可能な値は次のunsigned intとおりです。

bits  value
0000    0
0001    1
0010    2
0011    3
0100    4
0101    5
0110    6
0111    7
1000    8
1001    9
1010   10
1011   11
1100   12
1101   13
1110   14
1111   15

...そして、4ビットの16の可能な値は次のsigned intとおりです。

bits  value
0000    0
0001    1
0010    2
0011    3
0100    4
0101    5
0110    6
0111    7
1000   -8
1001   -7
1010   -6
1011   -5
1100   -4
1101   -3
1110   -2
1111   -1

ご覧のとおり、signed ints の最上位ビットは1、数値が負の場合のみです。そのため、signed ints の場合、このビットは「符号ビット」として知られています。

于 2011-04-26T11:55:27.713 に答える
15

ある整数変数に格納されている値が常に正であることが事前にわかっている場合があります。たとえば、ものをカウントするためだけに使用されている場合などです。このような場合、変数を unsigned として宣言できますunsigned int num student;。このような宣言では、許容される整数値の範囲 (32 ビット コンパイラの場合) は、-2147483648 から +2147483647 の範囲から 0 から 4294967295 の範囲にシフトします。それ以外の場合に保持できる値。

于 2011-11-23T11:40:39.367 に答える