signed
Cではどういう意味ですか?私はこの表を示しています:
これはsigned char
128
に言い+127
ます。128
も正の整数ですが、これはどのよう+128
になり+127
ますか?それとも、異なる意味128
を持っていますか?+127
私は本ApressBeginningCを参照しています。
符号付き整数は負の数を表すことができます。署名されていないことはできません。
符号付き整数はオーバーフローした場合に未定義の動作をしますが、符号なし整数はモジュロを使用してラップアラウンドします。
その表が正しくないことに注意してください。まず、-
兆候(-128〜 + 127など)がありません。第二に、規格はそれらのタイプがそれらの範囲内になければならないことを保証しません。
デフォルトでは、Cの数値は符号付きです。つまり、負と正の両方にすることができます。一方、符号なしの値は負の数を許可しません。
それはすべてメモリに関するものなので、最終的にはすべての数値がバイナリで格納されます。32ビットの符号なし整数には、すべての2進数の0からすべての2進数の1までの値を含めることができます。32ビットの符号付き整数となると、そのビットの1つ(最上位)がフラグであり、値が正または負であることを示します。つまり、値が署名されていることを示すのは解釈の問題です。
正の符号付きの値は符号なしの値と同じ方法で格納されますが、負の数は2の補数法を使用して格納されます。
2進数で負の値を書き込みたい場合は、最初に正の数を書き込み、次にすべてのビットを反転し、最後に1を加算します。2の補数の負の値を同じ大きさの正の数に加算すると、結果は0になります。
以下の例では、検査が簡単なため、8ビットの数値を処理できます。
positive 95: 01011111
negative 95: 10100000 + 1 = 10100001 [positive 161]
0: 01011111 + 10100001 = 100000000
^
|_______ as we're dealing with 8bit numbers,
the 8 bits which means results in 0
テーブルにマイナスがありません。符号付き文字の範囲は-128〜+127です。テーブルの他のタイプについても同様です。
それは本のタイプミスでした。署名された文字は-128から127になります。
符号付き整数は、2の補数表現を使用して格納され、最初のビットは符号を示すために使用されます。
Cでは、charは8ビット整数です。これは、-(2 ^ 7)から2 ^ 7-1に移動できることを意味します。これは、数値に最後の7ビットを使用し、符号に最初のビットを使用するためです。0は正を意味し、1は負を意味します(2の補数表現)。
符号なし文字には符号がないため、8ビットすべてを使用できます。(00000000)b = 0から(11111111)b=255になります。
符号付き数値は、+または-が付加された数値です。たとえば、+2と-6は符号付き数値です。符号付き数値は、正の数と負の数の両方を格納できるため、範囲が広くなります。すなわち-32768から32767
符号なしの数値は、符号のない単なる数値です。彼らは常にポジティブです。範囲は0〜65535です。
それが役に立てば幸い
署名付きとは、通常、番号の前に+または-記号が付いていることを意味します。これは、unsigned int、unsignedshortsなどが負になることはないことを意味します。
誰もこれについて言及していませんが、テーブル内のintの範囲が間違っています。
-2^(31) to 2^(31)-1
すなわち、
-2,147,483,648 to 2,147,483,647
符号付き整数は、負の値と正の値の両方を持つことができます。符号なし整数は正の値しか持てませんが。
最も一般的に使用される2の補数を使用する符号付き整数の場合、範囲は次のとおりです(整数のビット幅によって異なります)。
char s -> range -128-127
unsignedcharの範囲は次のとおりです。
unsigned char s -> range 0-255
まず、テーブルが間違っています...負の数がありません。char型を参照すると、charは1バイトで2 ^ 8を意味するため、256の可能性すべてを表すことができます。これで、範囲を設定するための2つの選択肢があります。-128から+128または0から255のいずれかです。最初の文字は符号付き文字で、2番目の文字は符号なし文字です。整数を使用する場合は、uが使用しているオペレーティングシステムの種類に注意してください。16ビット、32ビットまたは64ビット。Int(16ビット、32ビット、64ビット)。charは常に8ビット値です。