Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

符号付き整数型(フゴウツキセイトウガタ)とは | 意味や読み方など丁寧でわかりやすい用語解説

符号付き整数型(フゴウツキセイトウガタ)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

符号付き整数型 (フゴウトウセイ スウジガタ)

英語表記

signed integer type (サインドア整数型)

用語解説

コンピュータはすべての情報を0と1の組み合わせ、すなわちビット列として表現する。このビット列を使って数値を表現する際に、正の数と負の数の両方を扱えるように設計されたデータ型が「符号付き整数型」である。

概要

コンピュータにおける数値表現において、整数は大きく分けて「符号なし整数型」と「符号付き整数型」の二種類がある。符号なし整数型が0以上の正の整数のみを扱うのに対し、符号付き整数型はその名の通り、負の符号を持つ整数、すなわち負の数も表現可能である点が最大の特徴となる。これは、実世界で扱う数値の多くが正負の両方を持つため、プログラミングにおいて非常に汎用性が高く、利用頻度の高い型の一つである。負の数を表現するために、符号付き整数型では、数値のビット列の一部を符号の表現に割り当てる仕組みが採用されている。具体的には、通常、最も左側、すなわち最上位のビット(Most Significant Bit, MSB)を符号ビットとして利用し、このビットの値によってその整数が正の数であるか負の数であるかを区別する。この仕組みにより、同じビット数の整数型であっても、符号なし整数型とは異なる数値の表現範囲を持つことになる。

詳細

符号付き整数型で負の数を表現するために最も広く用いられているのが「2の補数表現」という方式である。この方式は、コンピュータ内部での加減算を効率的に行うために考案されたものであり、正の数と負の数の両方を一貫した方法で処理できるという利点を持つ。

2の補数表現において、最上位ビットは符号ビットとして機能する。この符号ビットが0であればその数値は正の数、1であれば負の数と解釈される。例えば8ビットの符号付き整数型を考える場合、左端の1ビットが符号ビットとなり、残りの7ビットで数値の絶対値を表現する。

正の数の場合は、符号ビットを0とし、残りのビットでその値を通常の2進数として表現する。例えば、8ビットで1を表す場合は「00000001」となる。 一方、負の数の表現は少し複雑である。ある正の数Xの負の数-Xを2の補数で得るには、まずXのビット列を全て反転させ(0を1に、1を0にする)、その結果に1を加えるという操作を行う。この方法で得られたビット列が-Xの2の補数表現となる。例えば、8ビットで-1を表す場合、まず1のビット列「00000001」を反転させると「11111110」となり、これに1を加えると「11111111」となる。これが8ビットの-1の2の補数表現である。この方式の利点は、正の数と負の数の加算を通常の2進数加算と同じロジックで行えること、そして「0」の表現が一意であることである。

符号付き整数型の表現範囲は、そのデータ型が何ビットで構成されているかによって決まる。nビットの符号付き整数型の場合、表現できる値の範囲は概ね -2^(n-1) から 2^(n-1) - 1 となる。例えば、よく使われるデータ型としては以下のようなものがある(具体的な値はプログラミング言語や環境により若干異なる場合がある)。

  • 8ビット符号付き整数型: -128 から 127
  • 16ビット符号付き整数型: -32,768 から 32,767
  • 32ビット符号付き整数型: -2,147,483,648 から 2,147,483,647
  • 64ビット符号付き整数型: -9,223,372,036,854,775,808 から 9,223,372,036,854,775,807

同じビット数の符号なし整数型と比較すると、符号付き整数型は表現可能な数値の最大値が約半分になり、その分、負の値を表現できるようになる。例えば、8ビットの符号なし整数型は0から255までの値を表現できるが、8ビットの符号付き整数型は-128から127までとなる。

プログラミングにおいて、符号付き整数型は非常に基本的なデータ型であり、ほとんどのプログラミング言語で標準的に提供されている。C言語におけるint型やshort型、long型などは、特に指定がなければ符号付き整数型として扱われる。明示的にsignedキーワードを付加することも可能であるが、通常は省略される。

符号付き整数型を使用する上で注意すべき点は、「オーバーフロー」と「アンダーフロー」である。これは、そのデータ型が表現できる最大値を超えた値を代入しようとしたり、最小値を下回る値を代入しようとしたりした場合に発生する。例えば、8ビット符号付き整数型で127に1を加算すると、結果は-128になる(最大値を超えると最小値に戻る、ラップアラウンドと呼ばれる現象)。同様に、-128から1を減算すると127になる。このような現象は意図しないバグやセキュリティホールにつながる可能性があるため、適切なデータ型を選択し、計算結果が表現範囲内に収まるように注意深くプログラミングを行う必要がある。

符号付き整数型は、年齢、口座残高、温度、ゲームのスコアなど、正負両方の値を取りうるあらゆる数値を扱う場合に適している。一方、メモリのアドレス、ファイルのサイズ、画像の色情報など、負の値が存在しないことが明確な場合には、符号なし整数型を使用することで、同じビット数でもより広い正の値の範囲を利用できるというメリットがある。このように、データの性質に応じて適切な整数型を選択することが、効率的で堅牢なプログラムを作成する上で重要となる。

関連コンテンツ