C语言有五种基本数据类型:字符、整型、单精度实型、双精度实型和空类型。尽管这几种类型数据的长度和范围随处理器的类型和C语言编译程序的实现而异,但以b i t为例,整数与CPU字长相等,一个字符通常为一个字节,浮点值的确切格式则根据实现而定。对于多数微机,表2 - 1给出了五种数据的长度和范围。
表中的长度和范围的取值是假定C P U的字长为1 6 b i t。
C语言还提供了几种聚合类型(aggregate types),包括数组、指针、结构、共用体(联合)、位域和枚举。这些复杂类型在以后的章节中讨论。
除v o i d类型外,基本类型的前面可以有各种修饰符。修饰符用来改变基本类型的意义,以便更准确地适应各种情况的需求。修饰符如下:
• signed(有符号)。
• unsigned(无符号)。
表中的长度和范围的取值是假定C P U的字长为1 6 b i t。
C语言还提供了几种聚合类型(aggregate types),包括数组、指针、结构、共用体(联合)、位域和枚举。这些复杂类型在以后的章节中讨论。
除v o i d类型外,基本类型的前面可以有各种修饰符。修饰符用来改变基本类型的意义,以便更准确地适应各种情况的需求。修饰符如下:
• signed(有符号)。
• unsigned(无符号)。
• long(长型符)。
• short(短型符)。修饰符s i g n e d、s h o r t、l o n g和u n s i g n e d适用于字符和整数两种基本类型,而l o n g还可用于d o u b l e(注意,由于long float与d o u b l e意思相同,所以A N S I标准删除了多余的long float)。
表2 - 2给出所有根据A N S I标准而组合的类型、字宽和范围。切记,在计算机字长大于float数值范围1 6位的系统中,short int与signed char可能不等。
*表中的长度和范围的取值是假定C P U的字长为1 6 b i t。因为整数的缺省定义是有符号数,
• short(短型符)。修饰符s i g n e d、s h o r t、l o n g和u n s i g n e d适用于字符和整数两种基本类型,而l o n g还可用于d o u b l e(注意,由于long float与d o u b l e意思相同,所以A N S I标准删除了多余的long float)。
表2 - 2给出所有根据A N S I标准而组合的类型、字宽和范围。切记,在计算机字长大于float数值范围1 6位的系统中,short int与signed char可能不等。
*表中的长度和范围的取值是假定C P U的字长为1 6 b i t。因为整数的缺省定义是有符号数,
所以s i n g e d这一用法是多余的,但仍允许使用。某些实现允许将u n s i g n e d用于浮点型,如unsigned double。但这一用法降低了程序的可移
植性,故建议一般不要采用。为了使用方便,C编译程序允许使用整型的简写形式:
• short int 简写为s h o r t。
• long int 简写为l o n g。
• unsigned short int 简写为unsigned short。
• unsigned int 简写为u n s i g n e d。
• unsigned long int 简写为unsigned long。
即,i n t可缺省。
• long int 简写为l o n g。
• unsigned short int 简写为unsigned short。
• unsigned int 简写为u n s i g n e d。
• unsigned long int 简写为unsigned long。
即,i n t可缺省。
2.3.1
整型常量
整型常量及整常数。它可以是十进制、八进制、十六进制数字表示的整数值。十进制常数的形式是:
d i g i t s
s
这里d i g i t s可以是从0到9的一个或多个十进制数位,第一位不能是0。八进制常数的形式是:
0 d i g i t s
s
在此,d i g i t s可以是一个或多个八进制数(0~7之间),起始0是必须的引导符。
十六进制常数是下述形式:
0 x h d i g i t s0 X h d i g i t s
这里h d i g i t s可以是一个或多个十六进制数(从0~9的数字,并从“a”~“ “f”的字母)。
引导符0是必须有的,X即字母可用大写或小写。注意,空白字符不可出现在整数数字之间。表2 - 3列出了整常数的形式。
整常数在不加特别说明时总是正值。如果需要的是负值,则负号“-”必须放置于常数表达式的前面。
每个常数依其值要给出一种类型。当整常数应用于一表达式时,或出现有负号时,常数类型自动执行相应的转换,十进制常数可等价于带符号的整型或长整型,这取决于所需的常数的尺寸。
八进制和十六进制常数可对应整型、无符号整型、长整型或无符号长整型,具体类型也取决于常数的大小。如果常数可用整型表示,则使用整型。如果常数值大于一个整型所能表示的最大值,但又小于整型位数所能表示的最大数,则使用无符号整型。同理,如果一个常数比无符号整型所表示的值还大,则它为长整型。如果需要,当然也可用无符号长整型。
在一个常数后面加一个字母l或L,则认为是长整型。如1 0 L、7 9 L、0 1 2 L、0 11 5 L、0 X A L、0 x 4 f L等。
2.3.2 整型变量
前面已提到,C规定在程序中所有用到的变量都必须在程序中指定其类型,即“定义”。这是和B A S I C、F O RT R A N不同的,而与P a s c a l相似。
运行结果为:
R U N <enter>
a+u=22, b+u=-1 4
可以看到不同类型的整型数据可以进行算术运算。在本例中是i n t型数据与unsingned int型数据进行相加减运算。
整型常量
整型常量及整常数。它可以是十进制、八进制、十六进制数字表示的整数值。十进制常数的形式是:
d i g i t s
s
这里d i g i t s可以是从0到9的一个或多个十进制数位,第一位不能是0。八进制常数的形式是:
0 d i g i t s
s
在此,d i g i t s可以是一个或多个八进制数(0~7之间),起始0是必须的引导符。
十六进制常数是下述形式:
0 x h d i g i t s0 X h d i g i t s
这里h d i g i t s可以是一个或多个十六进制数(从0~9的数字,并从“a”~“ “f”的字母)。
引导符0是必须有的,X即字母可用大写或小写。注意,空白字符不可出现在整数数字之间。表2 - 3列出了整常数的形式。
整常数在不加特别说明时总是正值。如果需要的是负值,则负号“-”必须放置于常数表达式的前面。
每个常数依其值要给出一种类型。当整常数应用于一表达式时,或出现有负号时,常数类型自动执行相应的转换,十进制常数可等价于带符号的整型或长整型,这取决于所需的常数的尺寸。
八进制和十六进制常数可对应整型、无符号整型、长整型或无符号长整型,具体类型也取决于常数的大小。如果常数可用整型表示,则使用整型。如果常数值大于一个整型所能表示的最大值,但又小于整型位数所能表示的最大数,则使用无符号整型。同理,如果一个常数比无符号整型所表示的值还大,则它为长整型。如果需要,当然也可用无符号长整型。
在一个常数后面加一个字母l或L,则认为是长整型。如1 0 L、7 9 L、0 1 2 L、0 11 5 L、0 X A L、0 x 4 f L等。
2.3.2 整型变量
前面已提到,C规定在程序中所有用到的变量都必须在程序中指定其类型,即“定义”。这是和B A S I C、F O RT R A N不同的,而与P a s c a l相似。
运行结果为:
R U N <enter>
a+u=22, b+u=-1 4
可以看到不同类型的整型数据可以进行算术运算。在本例中是i n t型数据与unsingned int型数据进行相加减运算。
2.4.1
实型常量
实型常量又称浮点常量,是一个十进制表示的符号实数。符号实数的值包括整数部分、尾数部分和指数部分。实型常量的形式如下:
[digits][.digits][E|e[+|-]digits]
]
在此digits是一位或多位十进制数字(从0~9)。E(也可用e)是指数符号。小数点之前是整数部分,小数点之后是尾数部分,它们是可省略的。小数点在没有尾数时可省略。指数部分用E或e开头,幂指数可以为负,当没有符号时视为正指数的基数为10,如
1.575E10表示为:1.575×1010。在实型常量中不得出现任何空白符号。在不加说明的情况下,实型常量为正值。如果表示负值,需要在常量前使用负号。下面是一些实型常量的示例:
15.75,1.575E10,1575e-2,-0.0025,-2.5e-3,25E-4
所有的实型常量均视为双精度类型。
。
实型常量
实型常量又称浮点常量,是一个十进制表示的符号实数。符号实数的值包括整数部分、尾数部分和指数部分。实型常量的形式如下:
[digits][.digits][E|e[+|-]digits]
]
在此digits是一位或多位十进制数字(从0~9)。E(也可用e)是指数符号。小数点之前是整数部分,小数点之后是尾数部分,它们是可省略的。小数点在没有尾数时可省略。指数部分用E或e开头,幂指数可以为负,当没有符号时视为正指数的基数为10,如
1.575E10表示为:1.575×1010。在实型常量中不得出现任何空白符号。在不加说明的情况下,实型常量为正值。如果表示负值,需要在常量前使用负号。下面是一些实型常量的示例:
15.75,1.575E10,1575e-2,-0.0025,-2.5e-3,25E-4
所有的实型常量均视为双精度类型。
。
实型常量的整数部分为0时可以省略,如下形式是允许的:
:
.57,.0075e2,-.125,-.175E-2
。
注意字母E或e之前必须有数字,且E或e后面指数必须为整数,如e3、2.1e3.5、.e3、e等都是不合法的指数形式。
2.4.2实型变量
实型变量分为单精度(float型)和双精度(double型)。对每一个实型变量都应再使用前
加以定义。如:
floatx,y;/*指定x,y为单精度实数*/
doublez;/*指定z为双精度实数*/
在一般系统中,一个float型数据在内存中占4个字节(32位)一个double型数据占8个字节(64位)。单精度实数提供7位有效数字,双精度提供15~16位有效数字,数值的范围随机器系统而异。
值得注意的是,实型常量是double型,当把一个实型常量赋给一个float型变量时,系统会截
:
.57,.0075e2,-.125,-.175E-2
。
注意字母E或e之前必须有数字,且E或e后面指数必须为整数,如e3、2.1e3.5、.e3、e等都是不合法的指数形式。
2.4.2实型变量
实型变量分为单精度(float型)和双精度(double型)。对每一个实型变量都应再使用前
加以定义。如:
floatx,y;/*指定x,y为单精度实数*/
doublez;/*指定z为双精度实数*/
在一般系统中,一个float型数据在内存中占4个字节(32位)一个double型数据占8个字节(64位)。单精度实数提供7位有效数字,双精度提供15~16位有效数字,数值的范围随机器系统而异。
值得注意的是,实型常量是double型,当把一个实型常量赋给一个float型变量时,系统会截
取相应的有效位数。例如
floata;
;a=111111.111;
floata;
;a=111111.111;
由于float型变量只能接收7位有效数字,因此最后两位小数不起作用。如果将a改为double型,则能全部接收上述9位数字并存储在变量a中。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论