22

signedCではどういう意味ですか?私はこの表を示しています:

ここに画像の説明を入力してください

これはsigned char 128に言い+127ます。128も正の整数ですが、これはどのよう+128になり+127ますか?それとも、異なる意味128を持っていますか?+127私は本ApressBeginningCを参照しています

4

9 に答える 9

39

符号付き整数は負の数を表すことができます。署名されていないことはできません。

符号付き整数はオーバーフローした場合に未定義の動作をしますが、符号なし整数はモジュロを使用してラップアラウンドします。

その表が正しくないことに注意してください。まず、-兆候(-128〜 + 127など)がありません。第二に、規格はそれらのタイプがそれらの範囲内になければならないことを保証しません。

于 2012-11-25T17:53:58.713 に答える
8

デフォルトでは、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
于 2012-11-25T18:48:31.407 に答える
4

テーブルにマイナスがありません。符号付き文字の範囲は-128〜+127です。テーブルの他のタイプについても同様です。

于 2012-11-25T17:53:09.293 に答える
4

それは本のタイプミスでした。署名された文字は-128から127になります。

符号付き整数は、2の補数表現を使用して格納され、最初のビットは符号を示すために使用されます。

Cでは、charは8ビット整数です。これは、-(2 ^ 7)から2 ^ 7-1に移動できることを意味します。これは、数値に最後の7ビットを使用し、符号に最初のビットを使用するためです。0は正を意味し、1は負を意味します(2の補数表現)。

  • 最大の正の7ビット数は(01111111)b = 2 ^ 7-1=127です。
  • 最小の負の7ビット数は(11111111)b = -128です
    (11111111は10000000 = 2 ^ 7 = 128の2の補数であるため)。

符号なし文字には符号がないため、8ビットすべてを使用できます。(00000000)b = 0から(11111111)b=255になります。

于 2012-11-25T18:49:09.383 に答える
2

符号付き数値は、+または-が付加された数値です。たとえば、+2と-6は符号付き数値です。符号付き数値は、正の数と負の数の両方を格納できるため、範囲が広くなります。すなわち-32768から32767

符号なしの数値は、符号のない単なる数値です。彼らは常にポジティブです。範囲は0〜65535です。

それが役に立てば幸い

于 2012-11-25T17:55:38.947 に答える
1

署名付きとは、通常、番号の前に+または-記号が付いていることを意味します。これは、unsigned int、unsignedshortsなどが負になることはないことを意味します。

于 2012-11-25T17:53:20.847 に答える
1

誰もこれについて言及していませんが、テーブル内のintの範囲が間違っています。

-2^(31) to 2^(31)-1

すなわち、

-2,147,483,648 to 2,147,483,647
于 2018-04-07T11:47:53.830 に答える
0

符号付き整数は、負の値と正の値の両方を持つことができます。符号なし整数は正の値しか持てませんが。

最も一般的に使用される2の補数を使用する符号付き整数の場合、範囲は次のとおりです(整数のビット幅によって異なります)。

char s -> range -128-127

unsignedcharの範囲は次のとおりです。

unsigned char s -> range 0-255

于 2012-11-25T17:59:01.327 に答える
0

まず、テーブルが間違っています...負の数がありません。char型を参照すると、charは1バイトで2 ^ 8を意味するため、256の可能性すべてを表すことができます。これで、範囲を設定するための2つの選択肢があります。-128から+128または0から255のいずれかです。最初の文字は符号付き文字で、2番目の文字は符号なし文字です。整数を使用する場合は、uが使用しているオペレーティングシステムの種類に注意してください。16ビット、32ビットまたは64ビット。Int(16ビット、32ビット、64ビット)。charは常に8ビット値です。

于 2012-11-25T18:03:16.817 に答える