符号付き整数と符号なし整数の違いは何ですか?
5 に答える
おそらくご存じのとおり、int
s はバイナリで内部的に格納されます。通常、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 int
s の最上位ビットは1
、数値が負の場合のみです。そのため、signed int
s の場合、このビットは「符号ビット」として知られています。
ある整数変数に格納されている値が常に正であることが事前にわかっている場合があります。たとえば、ものをカウントするためだけに使用されている場合などです。このような場合、変数を unsigned として宣言できますunsigned int num student;
。このような宣言では、許容される整数値の範囲 (32 ビット コンパイラの場合) は、-2147483648 から +2147483647 の範囲から 0 から 4294967295 の範囲にシフトします。それ以外の場合に保持できる値。