コンピューティングにおいて、符号の有無は、コンピュータ プログラムで数値を表すデータ型の特性です。数値変数は、正の数と負の数の両方を表すことができる場合は符号付き、負でない数 (ゼロまたは正の数) のみを表すことができる場合は符号なしになります。
符号付き数は負の数を表すことができるため、同じサイズ (ビット単位) の符号なし数でのみ表すことができる正の数の範囲が失われます。これは、可能な値の約半分が非正の値であるのに対し、それぞれの符号なし型は、可能な値すべてを正の数の範囲に割り当てることができるためです。
たとえば、2 の補数の符号付き 16 ビット整数は、 -32768 から 32767 までの値を保持できますが、符号なし 16 ビット整数は、 0 から65535までの値を保持できます。この符号表現方法では、左端のビット (最上位ビット) は、値が負かどうかを示します (正の場合は 0、負の場合は 1)。
プログラミング言語では
ほとんどのアーキテクチャでは、マシン言語に符号付きと符号なしの型の区別はありません。ただし、算術命令では通常、符号なし算術のキャリー フラグや符号付き算術のオーバーフロー フラグなど、異なるCPU フラグが設定されます。これらの値は、後続の分岐コマンドや算術コマンド で考慮されます。
Cプログラミング言語とその派生言語は、すべての整数データ型と「文字」に符号付きを実装しています。整数の場合、unsigned修飾子は型が符号なしであることを定義します。ビット フィールド外の整数のデフォルトの符号付きは signed ですが、signed修飾子を使用して明示的に設定できます。対照的に、C 標準では、signed char、unsigned char、およびcharを3 つの異なる型として宣言していますが、3 つすべてが同じサイズと配置を持つ必要があることを指定しています。さらに、char はsigned charまたはunsigned charのいずれかと同じ数値範囲を持つ必要がありますが、どちらを選択するかはプラットフォームによって異なります。整数リテラルは、Uサフィックスを使用して符号なしにすることができます。
コンパイラは、符号付き数値と符号なし数値を比較する場合や、一方を他方にキャストする場合に警告を発することがよくあります。符号付き型と符号なし型の範囲が異なるため、これらは潜在的に危険な操作です。
参照
- 符号ビット
- 符号付き数値表現
- 記号(数学)
- バイナリ角度測定システム、符号の有無が問題にならないセマンティクスの例
外部リンク
- 「数値型の概要」。MySQL 5.0リファレンス マニュアル。mysql.com。2011 年。2012 年1 月 6 日に取得。
- 「整数変換ルールを理解する」、CERT C コーディング標準、コンピュータ緊急対応チーム、 2015 年12 月 31 日取得
