符号属性
コンピューティングにおいて、符号属性(ふごうぞくせい、英語: signedness)は、コンピュータプログラムにおける数値を表すデータ型が持つ属性である。符号付き(signed)の場合は、数値変数は正と負の両方の数値を表すことができ、符号なし(unsigned)の場合は、数値変数は負でない数値(0と正の数値)のみを表すことができる。
符号付きの数値は負の数を表すことができるので、表すことのできる正の数の範囲は、同じサイズ(ビット数)の符号なしの数値よりも少なくなる。表現可能な値の半分は負の値になるためである。符号付き8ビット整数型の場合、符号なしでは表現できる128から255が表現できず、その代わりに-128から127が表現できる。符号なし変数は、全ての表現可能な値を正の数の範囲に割り当てられる。
例えば、2の補数による符号付き16ビット整数は-32768から32767まで値を保持でき、符号なし16ビット整数は0から65535までの値を保持できる。この符号表現法では、左端のビット(最上位ビット)は、値が正か負かを示す(正の場合は0、負の場合は1)。
プログラミング言語において
[編集]ほとんどのアーキテクチャでは、機械語では符号付きと符号なしの型の区別はない。それにもかかわらず、演算装置は通常、符号なし算術のキャリーフラグや符号付きのオーバーフローフラグなどで、異なるCPUフラグを設定する。これらの値は、その後の分岐命令や算術命令の際に考慮に入れることができる。 C言語やその派生語では、(キャラクタを含む)全ての整数型に符号属性が実装されている。unsigned修飾子は、型を符号なしに定義する。整数型のデフォルトの符号属性は符号付きであるが、signed修飾子で明示的に符号付きに定義することもできる。整数リテラルはU接尾子で符号なしにすることができる。例えば、32ビットコードで0xFFFFFFFFは-1になるが、0xFFFFFFFFUは4,294,967,295になる。
コンパイラは、符号付きの数値と符号なしの数値を比較したり、一方を他方にキャストしたりするときに警告を発することがよくある。これらは、符号付きと符号なしの値の範囲が異なるため、潜在的に危険な操作である。
関連項目
[編集]外部リンク
[編集]- “Numeric Type Overview”. MySQL 5.0 Reference Manual. mysql.com (2011年). 6 January 2012閲覧。
- “Understand integer conversion rules”, CERT C Coding Standard (Computer emergency response team) December 31, 2015閲覧。