K&R演習[2-1]

課題

char, short, int, long変数のsigned及びunsignedの両方の方について、それらの範囲を決めるプログラムを、標準ヘッダからの適当な値を印字することと、直接計算することの双方で書け。

回答

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

/**
 * @fn      Main
 * @brief
 * @param
 * @return
 * @detail
 */
int main(void)
{
    printf("  signed char  Min:%11d, Max:%11d, Min:%11d, Max:%11d\n",   SCHAR_MIN, SCHAR_MAX, -(int)pow(2, 7), (int)(pow(2, 7) - 1));
    printf("unsigned char  Min:%11d, Max:%11d, Min:%11d, Max:%11d\n",       0, UCHAR_MAX, 0, (int)(pow(2, 8) - 1));
    printf("  signed short Min:%11d, Max:%11d, Min:%11d, Max:%11d\n",   SHRT_MIN, SHRT_MAX, (int)pow(2, 15), (int)(pow(2, 15)) - 1);
    printf("unsigned short Min:%11d, Max:%11d, Min:%11d, Max:%11d\n",           0, USHRT_MAX, 0, (int)(pow(2, 16) - 1));
    printf("  signed int   Min:%11.0f, Max:%11.0f, Min:%11.0f, Max:%11.0f\n",   (double)INT_MIN, (double)INT_MAX, (double)pow(2, 31), (double)pow(2, 31) - 1);
    printf("unsigned int   Min:%11.0f, Max:%11.0f, Min:%11.0f, Max:%11.0f\n",   (double)0, (double)UINT_MAX, (double)0, (double)(pow(2, 32) - 1));
    printf("  signed long  Min:%11.0f, Max:%11.0f, Min:%11.0f, Max:%11.0f\n",   (double)LONG_MIN, (double)LONG_MAX, (double)pow(2, 31), (double)pow(2, 31) - 1);
    printf("unsigned long  Min:%11.0f, Max:%11.0f, Min:%11.0f, Max:%11.0f\n",   (double)0, (double)ULONG_MAX, (double)0, (double)pow(2, 32) - 1);
}

実行結果

  signed char  Min:       -128, Max:        127, Min:       -128, Max:        127
unsigned char  Min:          0, Max:        255, Min:          0, Max:        255
  signed short Min:     -32768, Max:      32767, Min:      32768, Max:      32767
unsigned short Min:          0, Max:      65535, Min:          0, Max:      65535
  signed int   Min:-2147483648, Max: 2147483647, Min: 2147483648, Max: 2147483647
unsigned int   Min:          0, Max: 4294967295, Min:          0, Max: 4294967295
  signed long  Min:-2147483648, Max: 2147483647, Min: 2147483648, Max: 2147483647
unsigned long  Min:          0, Max: 4294967295, Min:          0, Max: 4294967295