第2章 C语言的基本数据类型
本章要点
  了解C语言的数据类型,掌握基本数据类型的应用及其相互转换规则,理解变量和常量的概念,并掌握其定义及引用方法。本章的难点是数据在内存中的存储形式。
第一节 C语言的数据类型
由于信息的表现形式多种多样,处理的方法也不相同,所以,我们必须考虑用不同形式的数据来表示不同的信息。例如:一个班级的人数要用整数来表示;班级学生的平均成绩要用小数表示;学生的姓名、性别要用字符来表示;一个班级学生某一门课程的成绩要用一组不同的数值来表示等。
计算机语言中的数据类型就是为了能够高效处理各种不同的数据而引进的一个概念,是指数据的内在表现形式。不同的数据类型具有不同的取值范围和不同的操作。C语言提供的数据类型如图2-1所示。
在程序中使用的所有数据都必须指定它的数据类型,C语言的数据类型由基本类型和非基
本类型组成。其中,基本数据类型是其他数据类型的基础。
C语言中的基本数据类型包括整型、实型(浮点型)、字符型,其中实型又包括单精度和双精度两种类型。本章主要讨论这4种基本类型。
整型、单精度型、双精度型和字符型数据定义的关键字分别为:int、float、double和char。除了这四个关键字外,C语言中还提供了一些数据类型的修饰符,如:long、short、signed和unsigned。它们的作用是与基本类型的定义关键字结合起来使用,以对基本类型进行扩充,使得在程序编写的过程中可以灵活调整数值的范围以及所占用的存储空间。结合修饰符的应用,基本数据类型可进一步划分,如表2-1所示。
2-1 各种数据类型及其说明
定义关键字
说明
占用字节数
取值范围
整型
[signed] int
整型
4
-231  (231-1)
unsigned [int]
无符号整型
4
0 (232-1)
[signed] short [int]
短整型
2
-32768-215)~32767(215-1)
unsigned short [int]
无符号短整型
2
0 65535(216-1)
[signed] long [int]
长整形
4
-231 (231-1)
unsigned long [int]
无符号长整形
4
0 (232-1)
浮点型
float
单精度型
4
-3.4×10-38 3.4×10a的ascii的编码是多少38
double
双精度型
8
-1.7×10-308 1.7×10308
long double
长双精度型
8
-1.7×10-308 1.7×10308
字符型
char
字符型
1
-128 127
unsigned char
无符号字符型
1
0 255
signed char
有符号字符型
1
-128 127
说明:
(1)表中方括号内的部分是可以省略不写的。例如:unsigned short int与unsigned short是等价的。
(2)C标准并没有规定各种数据类型必须占用多少字节,通常只要求int型的长度应大于或等于short型,且应小于或等于long型。对于具体占用的字节数,不同的编译系统确定的长度也不相同。表2-1中各数据类型占用字节数以Visual C++ 6.0编译系统为例。
(3)实型数float和double总是有符号的,不能用unsigned来修饰。因此unsigned和signed只能修饰char和int,一般情况下,char和int默认为signed型。
(4)short只能修饰int,long只能修饰int和double。
(5)除了上表所列基本数据类型以外,在C99中,还增加了双长整型(long long int)和布尔型(bool)两种整型数据类型。
关于各种数据类型占用的字节数,在C语言中提供了一个长度运算符“sizeof”,该运算符可用
来测定指定数据类型在当前编译系统中所占用的字节数。当我们需要了解某个编译系统中某种数据类型的宽度时,可以使用这个运算符进行测试。
其格式为:sizeof(类型标识符或数据)
2.1 使用sizeof运算符测定Visual C++ 6.0编译系统中C语言各基本数据类型所占用的字节数。
#include <stdio.h>
void main()
{
    printf("int:%d B\n",sizeof(int));
    printf("unsigned:%d B\n",sizeof(unsigned));
    printf("short:%d B\n",sizeof(short));
    printf("unsigned short:%d B\n",sizeof(unsigned short));
    printf("long:%d B\n",sizeof(long));
    printf("unsigned long:%d B\n",sizeof(unsigned long));
    printf("float:%d B\n",sizeof(float));
    printf("double:%d B\n",sizeof(double));
    printf("long double:%d B\n",sizeof(long double));
    printf("char:%d B\n",sizeof(char));
    printf("unsigned char:%d B\n",sizeof(unsigned char));
    printf("signed char:%d B\n",sizeof(signed char));
}
程序运行结果:
int 4 B
unsigned:4 B
short:2 B
unsigned short:2 B
long:4 B
unsigned long:4 B
float:4 B
double:8 B
long double:5 B
char:1 B
unsigned char:1 B
signed char:1 B
第二节 常 量
在程序运行过程中,其值不能被改变的量称为常量。常量可分为直接常量和符号常量。
符号常量指的是指定一个符号,该符号在程序中代表一个常量值。在C语言中,符号常量是用预处理命令#define来定义的。如:
#define N 30
通过该预处理命令,指定了一个符号常量N,它代表常量30。凡是此后在程序中出现的N,系统都将它作为常量30来处理。
2.2 符号常量及其应用。
#include<stdio.h>
#define N 10          /* 指定一个符号常量N,它代表常量10 */
void main()
{
    int c;
    c=10*N;        /* 进行一次乘法运算,将10乘以N的值赋给变量c */
    printf("%d\n",c);
}
程序运行结果:100
习惯上,指定的符号常量名用大写字母来表示,以区别于变量名。
需要注意的是,符号常量一旦定义,它的值就被确定了,程序中就不能够对其再进行赋值操作。如上例,程序中不能再出现“N=20”这样的赋值语句,因为N是一个常量,在程序运行过程中其值是不能够被改变的。
在实际应用中,常常需要代入不同的常量值运行程序。使用符号常量可以大大提高效率,因为我们并不需要在程序中一一修改某个常量值,而只需在预处理命令中对常量的值做一次修改即可。
有关预处理命令及其具体用法,将在本书第十二章中详细介绍。
直接常量就是直接给出值的常量,即从其字面形式即可判别的常量。根据其类型又可分为整型常量、实型常量、字符常量和字符串常量。
一、整型常量
整型常量也就是整常数,在C语言中,整型常量可以用十进制、八进制、十六进制3种形式表示。
C语言规定,以0开头的数是八进制数,其后由0~7的数符组成;以0x开头的数是十六进制数,其后由0~9的数符和a~f或A~F的字母组成;其他数作为十进制数处理,十进制数由0~9的数符组成。例如:698表示十进制正整数;054表示八进制正整数,相当于十进制正整数44;0x6b表示十六进制正整数,相当于十进制正整数107。
整型常量中的长整型数据可用字母L或l作为后缀来表示,如8796L。整型常量中的无符号数可用字母U或u作为后缀来表示,如1234U。如果一个整型常量没有任何特殊标志,则编译系统按照其所在的数值范围来确定其类型。如:当一个整常数的值在十进制数范围-32768~32767内,则被看做是一个short型或int型。
二、实型(浮点型)常量
实型常量就是实数,由整数部分和小数部分组成,有以下两种表示方式。
(1)十进制小数形式。它由数字和小数点组成,可以没有整数部分或者没有小数部分,但是一定要有小数点。如:1.23、.23、123.、123.0、0.0都是合法的十进制小数形式。
(2)指数形式。如0.123e+2、0.123E2都表示0.123×102。在指数形式中必须注意,字母e(或E)之前必须有数字,并且e(或E)后面的指数必须为整数。如:e5、3e2.5都是不合法的指数形式。
实型常量在C语言中默认为double型,也就是说,对于带小数点的常量,C语言的编译器会将它作为double类型来看待。如果要将某实型常量作为float类型或long double类型,则需
要在该实型常量后面加后缀字母f、l来表示。如:123.4f,1.234E2F表示该常量为float类型;123.4l,1.234E2L表示该常量为long double类型。
三、字符常量与字符串常量
(一)字符常量
C语言中的字符常量有两种类型。普通字符常量是用一对单撇号括起来的一个字符。如:aB3#等。它在内存中储存的实际上是该字符对应的ASCII编码值,如:a的ASCII编码值为97,而A的ASCII编码值为65。所以,aA是两个不同的字符。
除此之外,C语言中还有一种特殊形式的字符常量,它是以反斜杠“\”开头的字符序列,称为转义字符。如:\n。转义字符是一种“控制字符”,在屏幕上是不能显示的。表2-2中列出了常用的转义字符。
2-2 常用转义字符
转义字符
作用
ASCII编码值
\n
换行,将光标从当前位置移到下一行开头
10
\t
水平制表,将光标从当前位置移到下一个Tab位置
9
\b
退格,将光标从当前位置移到前一列
8
\r
回车,将光标从当前位置移到本行开头(注:不换行)
13
\f
换页,将光标从当前位置移到下页开头
12
\\
表示一个反斜杠字符
92
\
表示一个单引号字符
39
\
表示一个双引号字符
34
\ddd
表示1-3位八进制数所代表的字符
\xhh
表示1-2位十六进制数所代表的字符
2.转义字符的应用。
#include<stdio.h>
void main()
{    printf("Hello!\nBeijing\n");    /* 分两行输出字符串 */
    printf("Hi!\tBeijing\n");      /* 将第二个字符串在下一个Tab位置输出 */
    printf("\\Beijing\\\n");      /* 将输出的字符串放到两个反斜杠中间 */

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。