つまり、でchar
あれば1 byte
8 ビットですよね?
つまり、2 ^ 8 = 256 で、0 から 255 が char の範囲ですか?
これは、符号付き int と符号なし int ではどのように機能しますか? int は 4 バイト、つまり 32 ビットなので、2 ^ 32
2 ^ 31 - 1 で符号付き int の正の範囲が得られますが、32 番目のビットはどうなるのでしょうか? これは符号に使用されますか? 符号はメモリにどのように格納されますか?
答え1
データ型が符号付き型として定義されている場合、主に符号付き絶対値表現と 2 の補数表現など、さまざまなタイプの表現があります。
符号付き絶対値表現の場合、符号ビットは最上位ビット (MSB、つまり左端のビット) として保存されます。MSB の 0 は正の数値を表し、1 は負の数値を表します。例:
7 = 00000111
-7 = 10000111
これはシンプルで(比較的)人間が読みやすいですが、整数型は通常ないこの方法は、次の 2 つの問題のために維持されます。
(1) ゼロには+0と-0の2つの表現方法があり、特殊なケースとなるため数値の比較が困難になります。
(2)計算は簡単ではない(足し算や引き算のように単純なものではない)。2つの正の数を足す、正の数に負の数を足す、負の数に正の数を足す、負の数に正の数を足す、2つの負の数を足す、という4つの異なる使用例がある。例えば、7+6は単純である。
1 Carry bit
7 = 00000111
6 = 00000110 (Logic for add)
.. ........
13 = 00001101
7+(-6)を計算すると、代わりに減算ロジックが使用されることを意味します
7 = 00000111
-6 = 10000110 (Logic for subtraction)
.. ........
1 = 00000001
したがって、8 ビットの数値の範囲は -(2^7)+1 から 2^7-1 (つまり、-127 から +127、ゼロが 2 つ +0 と -0) になります。符号付き絶対値表現は、主に浮動小数点数を保持するために使用されます。
そして、2 の補数表現につながります。正の数は、符号付き絶対値表現と同じ方法で表されます。符号ビットの変更には、次の 2 つの手順が必要です。(1) すべてのビットを反転する (すべての 0 を 1 に、1 を 0 に変更する) (2) 1 を加算する。
例えば、-6の表現を得るには、次の手順に従います。
6 = 00000110
Invert all bits: 11111001
Add one: 11111010
したがって、-6 は と表されます11111010
。2 の補数表現では、MSB から符号を読み取ることができますが、ゼロの表現は の 1 つだけです00000000
。
2 の補数表現の 2 進数の計算も簡単です。足し算は足し算です。7+(-6) の計算がどのように行われるかをもう一度見てみましょう。
1111111 Carry bit
7 = 00000111
-6 = 11111010 (Logic for add)
.. ........
1 = 00000001
したがって、8 ビットの数値の範囲は -(2^7) から 2^7-1 (つまり -128 から +127) になります。範囲は符号付き絶対値表現とは異なることに注意してください。