C言語のsigned(符号あり)とunsigned(符号なし)の違い

C言語 C言語
C言語

この記事では、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の数値範囲の比較です。

  • signed int: -2147483648 から 2147483647
  • unsigned int: 0 から 4294967295

C言語では最上位の1ビットを符号(sign)として使うか、値の一部として扱うかでsignedとunsignedを使い分けています。

  • char c=0 ; //0x00~0x7Fを値として表現、最上位ビットが0が正の数、1が負の数
  • unsigned char = 0 ; //0x00~0xFFを値として表現でき、最上位ビットも値を表現

まとめ

今回は、C言語の「signed」(符号あり)と「unsigned」(符号なし)の違いについて解説しました。

signedは正負の数を扱うことができ、unsignedは正の数のみを扱いますが、その分より広い範囲の数値を表現できるという特長があります。

使い分けはコードの効率や精度に関わるため、特性を理解して適切に使用することが重要です。

タイトルとURLをコピーしました