练习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类型的最大值。
相关文章推荐
- 练习 2-1 编写一个程序以确定分别由 signed 及 unsigned 限定的 char、short、 int 与 long 类型变量的取值范围。
- 练习2-1 编写一个程序一确定分别由signed及unsigned限定的char,short,int及long类型变量的取值范围。采用打印标准头文件中的相应值以及直接计算两种方式实现。通过直接计算来确定浮点类型的取值范围是一项难度很大的任务。
- 编写一个程序以确定分别由signed及unsigned限定的char、short、int及long类型变量的取值范围。采用打印标准头文件中的相应值以及直接计算两种方式实现
- 编写一个程序,分别以signed和unsigned限定的char、short、int与long类型的变量取值范围
- 请编写一个c程序确定signed,unsigned的char,short,int和long变量取值范围
- 打印分别由signed和unsigned限定的char , short, int ,与long类型变量的取值范围。
- 打印signed 及unsigned限定的char short int 及long类型变量的取值范围
- 计算char,short,int,long类型变量的取值范围
- 计算char,short,int,long类型变量的取值范围
- C语言中基本类型char、short、int、long等类型的取值范围
- C语言中基本类型char、short、int、long等类型的取值范围
- C、C++数据类型(int, long, short, char, long long) 的取值范围、最大最小值:climits 里的一些宏
- Windows下的char,short,int,long数值取值范围
- char,short,int ,long, long long 取值范围
- java中byte、short、int、long、float、double类型的取值范围
- java byte、short、int、long、float、double、char基本数据类型范围
- shortint int longint char ,unsigned的取值范围,float的取值
- C# 与数据库中字段类型 Int16(short), Int32(int), Int64(long)的取值范围、区别 。string长度
- char,short,int ,long , long long类型的范围
- 第7周 C语言程序设计(新2版) 练习2-1 确定各种类型变量的取值范围