常量与变量的分类_第1页
常量与变量的分类_第2页
常量与变量的分类_第3页
常量与变量的分类_第4页
常量与变量的分类_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

整型常量八进制整常数八进制整常数必须以0开头,即以0作为八进制数的前缀。数码取值为0〜7。八进制数通常是无符号数。以下各数是合法的八进制数:015(十进制为13)0101(十进制为65)0177777(十进制为65535)以下各数不是合法的八进制数:256(无前缀0)03A2(包含了非八进制数码)-0127(出现了负号)十六进制整常数十六进制整常数的前缀为0X或0x。其数码取值为0〜9,A〜F或a〜f。以下各数是合法的十六进制整常数:0X2A(十进制为42) 0XA0(十进制为160)0XFFFF(十进制为65535)以下各数不是合法的十六进制整常数:5A(无前缀0X) 0X3H(含有非十六进制数码)十进制整常数十进制整常数没有前缀。其数码为0〜9。以下各数是合法的十进制整常数:237 -56865535 1627以下各数不是合法的十进制整常数:023(不能有前导0) 23D(含有非十进制数码)在程序中是根据前缀来区分各种进制数的。因此在书写常数时不要把前缀弄错造成结果不正确。整型常数的后缀在16位字长的机器上,基本整型的长度也为16位,因此表示的数的范围也是有限定的:十进制无符号整常数的范围为0〜65535,有符号数为-32768〜+32767。八进制无符号数的表示范围为0〜0177777。十六进制无符号数的表示范围为0X0〜0XFFFF或0x0〜0xFFFF。如果使用的数超过了上述范围,就必须用长整型数来表示。长整型数是用后缀“L”或T”来表示的。例如:十进制长整常数158L(十进制为158)358000L(十进制为-358000)八进制长整常数012L(十进制为10)077L(十进制为63)0200000L(十进制为65536)十六进制长整常数0X15L(十进制为21)0XA5L(十进制为165)0X10000L(十进制为65536)长整数158L和基本整常数158在数值上并无区别。但对158L,因为是长整型量,C编译系统将为它分配4个字节存储空间。而对158,因为是基本整型,只分配2个字节的存储空间。因此在运算和输出格式上要予以注意,避免出错。无符号数也可用后缀表示,整型常数的无符号数的后缀为 “U”或“u”。例如:358u,0x38Au,235Lu均为无符号数。前缀,后缀可同时使用以表示各种类型的数。如0XA5Lu表示十六进制无符号长整数A5,其十进制为165。整型变量分类整型变量可以分为以下4类:短整型,类型关键字为short[int]。类型说明符为shortint或short'C110F1。所占字节和取值范围会因不同的编译系统而有差异。对于16字机,shortint占2个字节,在大多数的32位机中,shortint占4个字节。但总的来说,shortint至少16位,也就是2个字节基本整型,类型关键字为int。类型说明符为int,在内存中占4个字节(不同系统可能有差异,此处原为2,经查证windows系统下为4,VAX系统也如此),其取值为基本整常数⑶长整型,类型关键字为long[int]。类型说明符为longint或long,在内存中占4个字节,其取值为长整常数。在任何的编译系统中,长整型都是占4个字节。在一般情况下,其所占的字节数和取值范围与基本型相同。(4)无符号整型,类型关键字为unsigned[int]或unsignedshort或unsignedlong。unsigned[int]表示无符号基本整型;unsignedshort表示无符号短整型;unsignedlong表示无符号长整型。无符号整型只能用来存储无符号整数。类型说明符为unsigned。在编译系统中,系统会区分有符号数和无符号数,区分的根据是如何解释字节中的最高位,如果最高位被解释为数据位,则整型数据则表示为无符号数无符号型各种无符号类型量所占的内存空间字节数与相应的有符号类型量相同。但由于省去了符号位,故不能表示负数。下表列出了TurboC中各类整型量所分配的内存字节数及数的表示范围。类型说明符数的范围分配字节数int-32768-32767shortint-32768~32767signedint-32768-32767unsignedint0-65535longint-2147483648-2147483647unsignedlong0-4294967295变量说明的一般形式为类型说明符变量名标识符,变量名标识符,...;例如inta,b,c;(a,b,c为整型变量)longx,y;(x,y为长整型变量)unsignedp,q;(p,q为无符号整型变量)定义整型变量的格式是整数类型1个变量名或用逗号格开的多个变量名类似地,还可以定义unsignedint、unsignedlong型的变量。定义一个变量,意味着在内存中给这个变量分配了相应大小的存储空间,同时确定了这个变量值的存储方式和可以进行的操作占用内存字节数与值域上述各类型的整型变量占用的内存字节数随系统而异,一般以一个机器字(word)存放一个int型数据,而long型数据的字节数应不小于int型,short型不长于int型。在16位操作系统(例如DOS)中,一般用2字节存放一个int型数据;在32位操作系统(例如Win-dows98)中,默认为4字节。本节选用16位系统,各类整型数据的存储情况及取值范围如表6-1所示。表6-1各类霍型数据的长度程成值苑国类里类型标诅符Pr占字节数数信范用irn2-327fiy-327fi?即 -1fci推则^hnri|.|ini|2--技7fi7U|1■丁3~飞心-1长整型一1“嗥|.iine]4-2-11— -1无符兮整型unsigned|in.C|2仆〜fi55即2lh-1费符号盈整型un^i^nedlsharI20—65535叩口~21"-1耶号仁整垠unsignedlong4“-好,|显然,不同类型的整型变量,其值域不同。占用内存字节数为n的有符号整型变量,其值域为-2n*8-1~2n*8-1-1;无符号整型变量的值域为0~2n*8-1。例如,16位操作系统中的一个int型变量,其值域为-22*8-1~22*8-1-1,即-32768~32767;一个unsigned型变量的值域为0~22*8-1,即0~65535。【例6.1】整型数据程序示例。main()(inta,b,c,d;a=10,b=5;c=a+b;d=32767+1;printf("c=%d\n",c);printf("d=%d\n",d);}程序的运行结果如下:c=15d=-32768程序中开辟了名为a、b、c、d的4个存储单元,它们在内存中各占两个字节。a和b所代表的存储单元存放10和5,c所代表的存储单元中存放a和b中值的和15,d中存放32767与1的和,由于受到int型变量取值范围的限制,d中存放的值为-32768,而不是32768。从图6-2可以看到32767在内存中以二进制的表示形式,最左边一位是符号位(0表示正,1表示负)。32767再加1后,右边15个二进制位全为0,最左边一位为1,它是-32768的补码形式(数据在内存中都是以补码形式存放的)。所以,最终输出的值为-32768。因此,在使用某类型变量时,一定要注意该变量的取值范围。浮点型常量浮点型常量有多种写法。其基本形式为:首先写整数部分(可以带符号),接着写小数部分,然后写e或者E,最后再写一个有符号整数。例如:+1.2E+51.5e-9-5.0e10其中e或E被称为阶码标志,e或E后面的有符号整数被称为阶码。阶码代表10的阶码次方。例如:+1.2E+5的值是1.2*105。假设A为e前面的部分,N是e后面的部分,则AeN等于A*10N。此外,正号可以省略不写。小数部分也不是必需的,也就是说,5e3也是正确的。阶码标志和阶码也可以不写,如:13.5。小数点后面,阶码标志之前的那部分整数可以不写(9.E5),小数点之前的整数也可以不写(.96e-8),但是不能同时都不写。例如:56..53.143e6.6E-8注意:浮点型常量中不能有空格!例如:3.21e-12/*有空格,错!*/3.14e5/*有空格,错!*/浮点型常量默认是double类型的。假设var_f是float类型的变量,如果有以下语句:var_f=9.0*3.0;那么9.0和3.0都是double类型的常量。它们的乘积也是double型的。在进行赋值的时候,这个乘积被转化成float类型,然后再赋值给var_f。当然,我们也可以指定浮点型常量的类型。在浮点型常量后面添上f或者F,编译器就会用float类型来处理这个常量。例如:1.5f,2.1e6F。在后面添上l或者L的话,编译器会用longdouble类型来处理这个常量。例如:4.1l,50.2E5L。最好用大写L,因为小写l容易和数字1混淆。标准规定,对于float型,E后面的阶码的取值范围至少要达到-37到+37。对double和longdouble的规定同样如此。C99新增了一种表示浮点型常量的格式:使用十六进制前缀(0x或0X,0是数字0,不是字母o),用p或P代替前面所说的e或E,而且阶码代表的是2的阶码次方。例如:0xb.1ep5其中b等于十进制中的11,.1e等于1/16加14/256,p5等于25,也就是512。这个浮点型常量转换成十进制就是:(11+1/16+14/256)*25=5692浮点型数据(float,double,logndouble)介绍1.float,double,以及longdouble前面所说的数据类型只能用于处理整数。如果我们需要使用小数,就要使用浮点类型(floating-point)。C提供了三种浮点类型:float,double,以及longdouble。注意,unsigned/signed不能用于修饰浮点类型。浮点类型可以处理正数,也能处理负数。没有无符号浮点型。C标准要求float类型至少要能精确表示到小数点后6位。float一般是32位的。C标准规定double类型至少要能精确到小数点后10位。double通常是64位的。C还提供了longdouble类型,目的是提供一种比double更加精确的类型。然而,C标准仅仅规定longdouble至少要和double一样精确。longdouble通常96位或者128位。2,声明浮点型变量浮点型变量的声明和初始化与整型变量一样。例如:floatf_1,f_2;doubled_1;floatf_3=6.63;longdoubleld_1;1混淆。标准规定,对于float型,E后面的阶码的取值范围至少要达到-37到+37。对double和longdouble的规定同样如此。C99新增了一种表示浮点型常量的格式:使用十六进制前缀(0x或0X,0是数字0,不是字母o),用p或P代替前面所说的e或E,而且阶码代表的是2的阶码次方。例如:0xb.1ep5其中b等于十进制中的11,.1e等于1/16加14/256,p5等于25,也就是512。这个浮点型常量转换成十进制就是:(11+1/16+14/256)*25=5692注意:并非所有编译器都支持C99新增的这种格式!4.输出浮点数格式限定符%f命令printf函数以十进制形式输出float和double类型的浮点数;%e命令printf函数以指数形式输出float和double类型的浮点数;%a或%A命令printf函数以C99新增的那种十六进制格式输出,但是并非所有编译器都支持。如果您要输出longdouble类型的浮点数,请用%Lf,%Le,%La,或者%LA。例如:/*showfloat.c-用两种形式表示浮点数*/#include<stdio.h>intmain(void){floatvar_f=5.0;doublevar_df=3.14e2;longdoublevar_ld=6.51e-5;printf("%fisequalto%e",var_f,var_f);printf("%fisequalto%e",var_df,var_df);printf("%Lfisequalto%Le",var_ld,var_ld);return0;}输出如下:5.000000isequalto5.000000e+00314.000000isequalto3.140000e+020.000065isequalto6.510000e-05注意:以上是我在SuseLinux10下使用gcc4.02编译运行得到的输出。如果使用Dev-C++4.9.9.2编译运行本程序,则不能正常输出var_ld。大概是因为Dev-C++使用的编译器gcc中,longdouble是96位的,而它使用函数库中的printf函数却把longdouble当作64位的来处理。浮点数上溢(Overflow)和下溢(Underflow)假设您的编译器中,float最大只能达到3.4e38,如果有以下语句:floattoobig=3.4E38*100.0f;printf("%e”,toobig);这必然导致上溢!因为toobig无法表示3.4E38和100.0f的乘积。上溢的后果过去是没有定义的,不过现在C规定如果发生上溢,则产生一个表示无穷大的特殊值。因此,toobig的值最终会变成一个表示无穷大的特殊值。进而,printf函数会输出类似inf或者infinity的字眼。对一个绝对值非常小的浮点数进行除法,并且导致这个浮点数的精度降低,称之为下溢。打个比方,假设3.1415e-10除以10后,变成0.3141e-10,这就是下溢。单精度浮点型(float) 在C++中,单精度浮点型(float)专指占用32位存储空间的单精度(single-precision)值。单精度在一些处理器上比双精度更快而且只占用双精度一半的空间,但是当值很大或很小的时候,它将变得不精确。当你需要小数部分并且对精度的要求不高时,单精度浮点型的变量是有用的。例如,当表示美元和分时,单精度浮点型是有用的。在foxpro中,单精度浮点型是为了提供兼容性,浮点数据类型在功能上等价于数值型。 在VB中,Single数据类型Single(单精度浮点型)变量存储为IEEE32位(4个字节)浮点数值的形式,它的范围在负数的时候是从-3.402823E38到-1.401298E-45,而在正数的时候是从1.401298E-45到3.402823E38。6位有效位数 Single的类型声明字符为感叹号⑴。浮点型的选用通常,double是最好的选择,因为其精度较高,而且导致的运行时耗费相对float也多不了多少。双精度浮点型定义类型---doublefloat数据类型,计算机中表示实型变量的一种变量类型。此数据类型与单精度数据类型(float)相似,但精确度比float高,编译时所占的内存空间依不同的编译器而有所不同,通常情况,单精度浮点数占4字节(32位)内存空间,其数值范围为3.4E-38〜3.4E+38,;双精度型占8个字节(64位)内存空间,其数值范围为1.7E-308〜1.7E+308。声明double类型的变量:doublepuotient;初始化double类型的变量:puotient=5.621456873;doublepuotinet=5.12;2双精度浮点型概括C语言中,双精度浮点(double)型,占8个字节(64位)内存空间。其数值范围为1.7E-308〜1.7E+308,双精度完全保证的有效数字是15位,16位只是部分数值有保证,而单精度保证7位有效数字,部分数值有8位有效数.浮点型从狭义上说就是科学记数法双精度,即double。double有二,两个的意思。C标准要求float类型至少要能精确表示到小数点后6位,并且整数部分的表示范围至少要达到10-37--10+37。float一般是32位的。C标准规定double类型的整数部分的最小表示范围和float一样,都是10-37到10+37,但是它要求double类型的小数部分至少要能精确到小数点后10位。double通常是64位的。longdoubleC还提供了longdouble类型,目的是提供一种比double更加精确的类型。然而,C标准仅仅规定longdouble至少要和double一样精确。字符常量字符常量是用单引号括起来的单个字符构成。有两种表示方法:0ft新痛上如牯1(UHwftttirtffljQiDt6顾由的丫谣宇中wr理最.7:任才平况一种是用该字符的图形符号,如'b','y','*'。另外还可以用字符的ASCII码表示,即用反斜符(\)开头,后跟字符的ASCII码,这种方法也称为转义序列表示法,具体方法是:有两种形式:一种是用字符的八进制ASCII码,表示为:\odd.这里,odd是八进制值(o可以省略)。另一种使用字符的十六进制ASCII码值,表示为\0xhh或0Xhh这里hh是两位十六进制值。如:’A','\101'和'\x41'都表示同一个字符常量。转义序列表示法还可以用来表示一些特殊字符,用来显示特殊符号或控制输出格式。在C语言中,字符常量有以下特点:1) 字符常量只能用单引号括起来,不能用双引号或其它括号。2) 字符常量只能是单个字符,不能是字符串。3) 字符可以是字符集中任意字符。但数字被定义为字符型之后就不能参与数值运算。如'5'和5是不同的。’5'是字符常量,不能参与运算。2C语言在C语言中,一个字符常量代表ASCII字符集中的一个字符,在程序中用单引号把一个ASCII字符集中的字符括起来作为字符常量。字符常量在内存中占一个字节,存放的是字符的ASCII码(整型数据)。C语言规定所有字符常量都作为整型量来处理。1含义字符串常量是一对双引号括起来的字符序列。例如下面的是合法的字符串常量:"howdoyoudo.","CHINA","a","$123.45"存储:字符串中的字符依次存储在内存中一块连续的区域内,并且把空字符\0'自动附加到字符串的尾部作为字符串的结束标志。故字符个数为n的字符串在内存中应占(n+1)个字节可以输出字符串,例如:printf("howdoyoudo.");2与字符常量的比较c语言允许使用字符串常量外,还允许使用字符常量。字符常量是由一对单引号括起来的单个字符。不能将字符串与字符常量混淆。字符常量可以赋值给字符变量,如"charb='a';”,但不能把一个字符串常量赋给一个字符变量,同时也不能对字符串常量赋值!3与字符数组的关系在c语言中没有专门的字符串变量,如果想将一个字符串存放在变量中以便保存,必须使用字符数组,即用一个字符型数组来存放一个字符串,数组中每一个元素存放一个字符。例如“chara[10]="love".”字符变量定义形式:char标识符1,标识符2,...,标识符n

例如:charc1,c2,c3,ch;c1='a';c2='b';c3='c';ch=„d';说明:字符变量在内存中占一个字节。在内存中,是把字符对应的ASCII码值放到存储单元中.字符型数据与整型数据之间可以通用.每个字符变量被分配一个字节的的内存空间,因此只能存放一个字符。字符值是以ASCH码的形式存放在变量的内存单元之中的。如x的十进制ASCII是120,y的十进制ASCII是121。对字符变量a,b赋予'x'和'y'值:a='x';b='y';实际上是在a,b两个单元内存放120和121的二进制代码a01111000b01111001所以也可以把它们看成是整形变量。C语言允许对整形变量赋予字符值,也允许对字符变量赋整形值。在输出时,允许把字符变量按整形量输出,也允许把整形量按字符量输出。整形量为二字节量,字符量为单字节量,当整形量按字符量处理时,只有低八位字节参与处理。枚举型常量与变量枚举型枚举型数据是ANSIC新标准中提供的一种用户自定义的数据类型,主要用途是用名称来代替某些有特定含义的数据,增加程序的可读性。枚举型的定义枚举型需要用户自己定义,定义方法如下:enum枚举型名{枚举常量1,枚举常量2,...,枚举常量n};注意在右花括号的后面有一个语句结束符“分号”。其中:枚举型名是用户取的标识符;枚举常量是用户给常量取的标识符。该语句定义了一个名为“枚举型名”的枚举类型,该枚举型中含有n个枚举常量,每个枚举常量均有值。C语言规定枚举常量的值是依次等于0、1、…、n-l。例如,定义一个表示星期的枚举型:enumweek{sun,mon,tue,wed,thu,fri,sat};定义的这个枚举型共有7个枚举常量,它们的值依次为0、1、2、3、4、5、6。C语言规定,在定义枚举型时,可以给枚举常量赋初值,方法是在枚举常量的后面跟上“=整型

常量”。例如,表示三原色的枚举型可以定义如下:enum

温馨提示

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

评论

0/150

提交评论