您的位置:首页 > 其它

笔记——打印变量取值范围的两种方法

2015-06-17 09:30 393 查看
1、打印标准头文件中的相应值

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

/* determine ranges of types */
main()
{
/* signed types          */
printf("signed char min = %d\n", SCHAR_MIN);
printf("signed chat 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);
}


2、利用按位运算符进行直接计算

# include <stdio.h>

/* determine ranges of types */
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 min = %ld\n", (long)((unsigned long) ~0 >> 1));
/* unsigned types        */
printf("unsigned char max = %u\n", (unsigned char) ~0 >> 1);
printf("unsigned short max = %u\n", (unsigned short) ~0 >> 1);
printf("unsigned int max = %u\n", (unsigned int) ~0 >> 1);
printf("unsigned long max = %lu\n", (unsigned long) ~0 >> 1);
}


(char)((unsigned char) ~0 >> 1)的说明:

先把0的各二进制位转换为1 --> ~0

将结果值转换为unsigned char类型 --> (unsigned char) ~0

右移一位清除符号位 --> (unsigned char) ~0 >> 1

转换为char类型 --> (char)((unsigned char) ~0 >> 1)

得到了signed char类型字符的最大值

问题:如此计算signed char最小值为-127,应该为-128,少处理了一步
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: