您的位置:首页 > 其它

练习2-1 编写一个程序以确定分别由signed及unsigend限定的char short int 与long类型变量的取值范围

2016-08-23 16:03 956 查看


练习2-1 编写一个程序以确定分别由signed及unsigend限定的char short int 与long类型变量的取值范围

方法1 打印标准头文件中的响应值

<pre name="code" class="objc"><pre name="code" class="objc">#include<stdio.h>
#include<limits.h>

//determing ranges of types
int main()
{
//    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);

return 0;

}




ANSI C标准规定,各种类型的取值范围必须在头文件<limits.h>中定义。short、int和long类型在不同的硬件上有不同的长度,所以他们在不同机器上的取值范围也往往会不同。

方法2 利用按位运算符进行计算

#include<stdio.h>

//determing ranges of types
int main()
{

//    signed types
printf("Signed char min = %d\n", -(char)((unsigned char) ~0 >> 1));
printf("Signed char max = %d\n", (char)((unsigned char) ~0 >> 1));
printf("Signed short min = %d\n", -(short)((unsigned short) ~0 >> 1));
printf("Signed short max = %d\n", (short)((unsigned short) ~0 >> 1));
printf("Signed int min = %d\n", -(int)((unsigned int) ~0 >> 1));
printf("Signed int max = %d\n", (int)((unsigned int) ~0 >> 1));
printf("Signed long min = %ld\n", -(long)((unsigned long) ~0 >> 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);

return 0;

}

(char)((unsigned char) ~0 >> 1)这个表达式的作用:

~0将0的各个二进制位取反全部转换为1,(unsigned char) ~0将结果值转换为unsigned char类型,(unsigned short) ~0 >> 1将unsigned char类型值右移一位以清除符号位,(char)((unsigned char) ~0 >> 1))将结果值进一步转换为char类型,最终得到了signed char类型的最大值。




                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐