C数据类型表示范围.docx_第1页
C数据类型表示范围.docx_第2页
C数据类型表示范围.docx_第3页
C数据类型表示范围.docx_第4页
C数据类型表示范围.docx_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C和C+语言中基本的数据类型有:字符型(char),整形(short, int, long), 浮点型(float, double)类型字节数类型字节数char1short2int根据系统而定,可能是2或4long4float4double8同时字符型和整形还可以继续分为带符号的和不带符号的,默认情况下都是带符号的,如果想使用不带符号的,则使用时带上 unsigned说明即可,如果是带符号的,那么最高位将表示符号位,最高位为0表示为正数,最高位为1表示为负数,因此根据这个可以得到不同类型在分别带符号和不带符号的情况下表示的数据范围:类型范围类型范围(signed)char-128127unsigned char0255(signed) short-3276832767unsigned short065535(signed ) int-3276832767unsigned short065535(signed) long-21474836482147483647unsigend long04294967295float-3.4*10-383.4*1038double-1.7*10-3081.7*103082、对于字符型和整形特别需要注意其表示的范围,如果运算导致超出其范围的处理,如以下的代码:1. intmain()2. 3. signed char ch=127;4. ch+=1;5. printf(%dn,ch);6.7. return 0;8. 输出结果为:-128,注意,定义ch时赋予的值为127,已经是char能表示的最大数,其最终结果-128的来历是这样的:第一步:首先127在计算机中用二进制表示为:01111111;第二步:01111111 + 00000001 = 10000000;第三步:由于ch是带符号的,当最高位为1时,表示是负数,而负数的计算机中是利用补码来存储的,回忆计算负数补码的方法(首先取负数的绝对值,然后求二进制,对二进制取反,在对取反后的值加1,即为负数的补码);第四步:于是根据求补码的反步骤,我们来求最原始的负数,由于本题中补码为10000000,首先10000000 - 00000001 = 01111111,然后对01111111取反为10000000,10000000 = 128,由于本身是负数,即ch为-128.再看以下一段代码:1. intmain()2. 3. unsigned char ch=255;4. ch+=1;5. printf(%dn,ch);6.7. return 0;8. 输出结果为:0;其分析为:首先ch = 255提升为整形,在计算机的存储为:(000.)11111111,然后(000.)11111111+1 = (000.)0001 00000000;然后再将最后的八位二进制截取给ch,由于最后八位全是0,因此ch = 0了。同理:对于遇到整形int short, long等出现上述情况时,我们也可以这样分析得到结果。速查表:char -128 +127 (1 Byte)short -32767 + 32768 (2 Bytes)unsigned short 0 65535 (2 Bytes)int -2147483648 +2147483647 (4 Bytes)unsigned int 0 4294967295 (4 Bytes)long = intlong long -9223372036854775808 +9223372036854775807 (8 Bytes)double 1.7 * 10308 (8 Bytes)unsigned int 04294967295long long的最大值:9223372036854775807long long的最小值:-9223372036854775808unsigned long long的最大值:18446744073709551615_int64的最大值:9223372036854775807_int64的最小值:-9223372036854775808unsigned _int64的最大值:18446744073709551615详细教程:=符号属性长度属性基本型所占位数取值范围输入符举例输出符举例- - char 8 -27 27-1 %c %c、%d、%usigned - char 8 -27 27-1 %c %c、%d、%uunsigned - char 8 0 28-1 %c %c、%d、%usigned short int 16 -215 215-1 %hdunsigned short int 16 0 216-1 %hu、%ho、%hxsigned - int 32 -231 231-1 %dunsigned - int 32 0 232-1 %u、%o、%xsigned long int 32 -231 231-1 %ldunsigned long int 32 0 232-1 %lu、%lo、%lxsigned long long int 64 -263 263-1 %I64dunsigned long long int 64 0 264-1 %I64u、%I64o、%I64x- - float 32 +/- 3.40282e+038 %f、%e、%g- - double 64 +/- 1.79769e+308 %lf、%le、%lg %f、%e、%g- long double 96 +/- 1.79769e+308 %Lf、%Le、%Lg几点说明:1.注意!表中的每一行,代表一种基本类型。“”代表可省略。例如:char、signed char、unsigned char是三种互不相同的类型;int、short、long也是三种互不相同的类型。2. char/signed char/unsigned char型数据长度为1字节;char为有符号型,但与signed char是不同的类型。注意!并不是所有编译器都这样处理,char型数据长度不一定为1字节,char也不一定为有符号型。3.将char/signed char转换为int时,会对最高符号位1进行扩展,从而造成运算问题。所以,如果要处理的数据中存在字节值大于127的情况,使用unsigned char较为妥当。程序中若涉及位运算,也应该使用unsigned型变量。4. char/signed char/unsigned char输出时,使用格式符%c(按字符方式);或使用%d、%u、%x/%X、%o,按整数方式输出;输入时,应使用%c,若使用整数方式,Dev-C+会给出警告,不建议这样使用。5. int的长度,是16位还是32位,与编译器字长有关。16位编译器(如TC使用的编译器)下,int为16位;32位编译器(如VC使用的编译器cl.exe)下,int为32位。6.整型数据可以使用%d(有符号10进制)、%o(无符号8进制)或%x/%X(无符号16进制)方式输入输出。而格式符%u,表示unsigned,即无符号10进制方式。7.整型前缀h表示short,l表示long。输入输出short/unsigned short时,不建议直接使用int的格式符%d/%u等,要加前缀h。这个习惯性错误,来源于TC。TC下,int的长度和默认符号属性,都与short一致,于是就把这两种类型当成是相同的,都用int方式进行输入输出。8.关于long long类型的输入输出:%lld和%llu是linux下gcc/g+用于long long int类型(64 bits)输入输出的格式符。而%I64d和%I64u则是Microsoft VC+库里用于输入输出_int64类型的格式说明。Dev-C+使用的编译器是Mingw32,Mingw32是x86-win32 gcc子项目之一,编译器核心还是linux下的gcc。进行函数参数类型检查的是在编译阶段,gcc编译器对格式字符串进行检查,显然它不认得%I64d,所以将给出警告“unknown conversion type character I in format”。对于%lld和%llu,gcc理所当然地接受了。Mingw32在编译期间使用gcc的规则检查语法,在连接和运行时使用的却是Microsoft库。这个库里的printf和scanf函数当然不认识linux gcc下%lld和%llu,但对%I64d和%I64u,它则是乐意接受,并能正常工作的。9.浮点型数据输入时可使用%f、%e/%E或%g/%G,scanf会根据输入数据形式,自动处理。输出时可使用%f(普通方式)、%e/%E(指数方式)或%g/%G(自动选择)。10.浮点参数压栈的规则:float(4字节)类型扩展成double(8字节)入栈。所以在输入时,需要区分float(%f)与double(%lf),而在输出时,用%f即可。printf函数将按照double型的规则对压入堆栈的float(已扩展成double)和dou

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论