課題
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