署名

コンピューティングにおいて、符号の有無はコンピュータプログラムで数値を表すデータ型の特性です。数値変数は、負の両方の数値を表現できる場合は符号付き負でない数値(ゼロまたは正の数)のみを表現できる場合は符号なしとなります。

符号付き数は負の数を表すことができるため、同じサイズ (ビット単位) の符号なし数でのみ表すことができる正の数の範囲が失われます。これは、可能な値の約半分が非正の値であるのに対し、それぞれの符号なし型は、可能な値すべてを正の数の範囲に専用できるためです。

例えば、2の補数符号付き16ビット整数は -32768 から 32767 までの値を保持できますが、符号なし16ビット整数は 0 から65535までの値を保持できます。この符号表現方法では、左端のビット(最上位ビット)が値が負かどうかを示します(0 は正またはゼロ、1 は負)。

プログラミング言語では

ほとんどのアーキテクチャでは、機械語において符号付きと符号なしの型の区別はありません。しかしながら、算術命令は通常、符号なし演算の場合はキャリーフラグ、符号付き演算の場合はオーバーフローフラグなど、異なるCPUフラグを設定します。これらの値は、後続の分岐命令や算術命令で考慮されます。

C プログラミング言語その派生言語 (符号なし型がないJavaを除く) は、すべての整数データ型および「文字」に符号付きを実装しています。整数の場合、unsigned修飾子によって型が符号なしであることを定義します。ビット フィールド外の整数のデフォルトの符号付きは符号付きですが、修飾子を使用して明示的に設定できますsigned。対照的に、C 標準ではsigned char、、、unsigned char3 つのchar異なる型として宣言していますが、3 つすべてが同じサイズとアラインメントを持つ必要があることを指定しています。さらに、はまたは と同じ数値範囲を持つ必要がありますが、どちらを選択するかはプラットフォームによって異なります。整数リテラルは、 Uサフィックスを使用して符号なしにすることができますcharsigned charunsigned char

コンパイラは、符号付き数値と符号なし数値の比較、あるいは一方を他方にキャストする際に、警告を発することがよくあります。符号付き型と符号なし型の範囲が異なるため、これらの操作は潜在的に危険です。

データ型
ビットマックス
8(署名入り)−128127
16(署名)−32 76832,767
32(署名)−2 147 483 6482 147 483 647
64(署名)−9 223 372 036 854 775 8089 223 372 036 854 775 807
128(署名)−170 141 183 460 469 231 731 687 303 715 884 105 728170 141 183 460 469 231 731 687 303 715 884 105 727
8(無署名)0255
16(無署名)065 535
32(無署名)04 294 967 295
64(符号なし)018 446 744 073 709 551 615
128(符号なし)0340 282 366 920 938 463 463 374 607 431 768 211 455

参照

  • 「数値型の概要」。MySQL 5.0リファレンスマニュアル。mysql.com。2011年。 2012年1月6日閲覧
  • 「整数変換規則を理解する」、CERT Cコーディング標準コンピュータ緊急対応チーム、 2015年12月31日取得
「https://en.wikipedia.org/w/index.php?title=Signedness&oldid=1319180168」より取得