プログラミング+α学習ブログ

勉強したことの備忘録です。

char型が符号付きか符号無しかを判定してその表現範囲を表示するプログラム

#include <stdio.h>
#include <limits.h>

int main(void)
{
    printf("この処理系のchar型は");
    
    if (CHAR_MIN)    //  <limits.h>で定義されているCHAR_MINの値が0かどうかで判断
        puts("符号付きで、");
    else
        puts("符号無しで、");
    
    printf("%d~%dを表すことができます。\n", CHAR_MIN, CHAR_MAX);
    
    return (0);
}

実行結果

この処理系のchar型は符号付きで、
-128~127を表すことができます。

char型

signedやunsignedが明示的に与えられていない単なるchar型が、符号付きとなるか符号無しとなるかは処理系によって異なる。

整数定数

例えば0や20や525などの整数で表される定数のこと。

整数定型の型

プログラム中に値を埋め込む整数定数としては、10進定数以外に下記が使用可能。

8進定数

0で始まる。例えば、8進定数012は10進数での10という値を持つ。

16進定数

0xまたは0Xで始まる。例えば、16進定数0x12は10進数での18という値をもつ。

整数接尾語(integer suffix)

整数定数を符号無しであると明示するには

uまたはUという整数接尾語をつける。

整数定数をlongであると明示するには

lまたはLという整数接尾語をつける。

例えば、0ULはunsigned long int型の0である。

整数接尾語のない10進定数(例、1000や60000)

その値がint型で表現できる範囲に入っているか?→YES:int型となる
↓NO
では、その値がlong型で表現できる範囲に入っているか?→YES:long型となる。
↓NO
unsigned long型となる。

以下、規則表

接尾語無し10進定数

int→long→unsigned long

接尾語無し8/16進定数

int→unsigned→long→unsigned long

u/U接尾語付き

unsigned→unsigned long

l/L接尾語付き

long→unsigned long

l/Lとu/U接尾語付き

unsigned long