この記事では、C言語における変数の型指定子「signed」(符号あり)と「unsigned」(符号なし)の違いについて詳しく解説します。
signedとunsignedは整数型の変数に符号の有無を指定するために使用され、プログラムの動作に大きな影響を与えるため、しっかりと理解しておくことが重要です。
実際の使用例を交えて説明しますので、初心者から中級者まで役立つ内容です。
C言語のsignedとunsignedの違いとは?
signed(符号あり)とは?
「signed」は、整数型変数に正負の符号を持たせるために使用されます。
つまり、変数が正の数か負の数かを表すことができるのです。
例えば、-10、0、10のような値を扱うことができます。デフォルトでint型はsignedとして扱われます。
signedの実装例
以下のコードは、signed変数の例を示しています。
この例では、変数に負の数を代入して、その結果を出力しています。
#include <stdio.h>
int main() {
signed int num = -10; // 符号あり整数型
printf("signed intの値: %d\n", num);
return 0;
}
unsigned(符号なし)とは?
「unsigned」は、符号がない整数型変数を表します。
この場合、負の数を扱うことはできませんが、その代わりに正の数だけでより大きな範囲を扱うことができます。
unsignedは、特に負の値を使用する必要がない場合や、大きな正の数を扱いたい場合に使用されます。
unsignedの実装例
次のコードは、unsigned変数を使用した例です。
ここでは、符号なしの数値を扱い、大きな正の値を代入しています。
int main() {
unsigned int num = 3000000000; // 符号なし整数型
printf("unsigned intの値: %u\n", num);
return 0;
}
signedとunsignedの違いを理解する
signedとunsignedの違いは、変数が扱える数値範囲にあります。
signedは負の数と正の数の両方を扱えるのに対し、unsignedは正の数のみを扱えます。
しかし、unsignedの方が正の数に対して広い範囲を扱えるため、状況に応じて使い分けることが求められます。
signedとunsignedの数値範囲
以下は、32ビットシステムでのsignedとunsignedの数値範囲の比較です。
C言語では最上位の1ビットを符号(sign)として使うか、値の一部として扱うかでsignedとunsignedを使い分けています。
まとめ
今回は、C言語の「signed」(符号あり)と「unsigned」(符号なし)の違いについて解説しました。
signedは正負の数を扱うことができ、unsignedは正の数のみを扱いますが、その分より広い範囲の数値を表現できるという特長があります。
使い分けはコードの効率や精度に関わるため、特性を理解して適切に使用することが重要です。