編寫一個程序以確定分別由signed及unsigned限定的char、short、int及long類型變量的取值範圍。採用打印標準頭文件中的相應值以及直接計算兩種方式實現



採用打印標準頭文件中的相應值:

#include <stdio.h>
#include <limits.h>
//determine ranges of types
int main()
{
printf("採用打印標準頭文件limits.h中的相應值:\n");
//signed types
printf("signed char min = %d\n", SCHAR_MIN);
printf("signed char max = %d\n", SCHAR_MAX);
printf("signed short min = %d\n", SHRT_MIN);
printf("signed short max = %d\n", SHRT_MAX);
printf("signed int min = %d\n", INT_MIN);
printf("signed int max = %d\n", INT_MAX);
printf("signed long min = %ld\n", LONG_MIN);
printf("signed long max = %ld\n", LONG_MAX);
//unsigned types
printf("unsigned char max = %u\n", UCHAR_MAX);
printf("unsigned short max = %u\n", USHRT_MAX);
printf("unsigned int max = %u\n", UINT_MAX);
printf("unsigned long max = %lu\n", ULONG_MAX);
system("pause");
return 0;
}


執行結果:

直接計算:

#include <stdio.h>
//determine ranges of types
int main()
{
printf("採用直接計算的方式:\n");
//signed types
printf("signed char min = %d\n", -(char)((unsigned char)~0>>1)-1);
printf("signed char max = %d\n", (char)((unsigned char)~0>>1));
printf("signed short min = %d\n", -(short)((unsigned short)~0>>1)-1);
printf("signed short max = %d\n", (short)((unsigned short)~0>>1));
printf("signed int min = %d\n", -(int)((unsigned int)~0>>1)-1);
printf("signed int max = %d\n", (int)((unsigned int)~0>>1));
printf("signed long min = %ld\n", -(long)((unsigned long)~0>>1)-1);
printf("signed long max = %ld\n", (long)((unsigned long)~0>>1));
//unsigned types
printf("unsigned char max = %u\n", (unsigned char)~0);
printf("unsigned short max = %u\n", (unsigned short)~0);
printf("unsigned int max = %u\n", (unsigned int)~0);
printf("unsigned long max = %lu\n", (unsigned long)~0);
system("pause");
return 0;
}


執行結果:


小結:

  利用按位運算符進行計算。表達式:(char)((unsigned char)~0>>1)

  先把數字0的各個二進制位全部轉換爲1:取反,~0

  然後,將結果值轉換爲unsigned char類型:(unsigned char)~0

  再把這個unsigned char類型值右移一位以清除符號位:(unsigned char)~0 >> 1

  最後,把它轉換爲char類型:(char)((unsigned char)~0>>1)

  這一系列操作的最終結果就得到了signed類型字符的最大值。

  而其signed類型字符的最小值加負號後還需減去1纔是最小值。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章