第2章数据描述
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第2章 基本数据类型
●基本数据类型的特征 ●数据常量 ●数据类型转换 ●数据的控制台输入与输出
C语言提供有丰富的数据类型:
char(字符类型)
short(短整型) 整 型 int(整型)
基 本 数据类型
浮点型 C 语 言 数据类型 void类型
long(长整型)
float(单精度浮点型) double(双精度浮点型)
不同长度整型数据的取值范围
数据长 度 (比特) 8 16 32 64 取值范围 Signed (有符号) -127~ 127 -32 767 ~ 32 767 -2 147 483 647 ~ 2 147 483 647 -(263-1) ~ 263-1 Unsigned (无符号) 0 ~ 255 0 ~ 65 535 0 ~ 4 294 967 295 0 ~ 264-1(18 446 744 073 709 551 615)
2)后缀字母标识法: 用L或l表示long类 型整数。 用LL或ll表示long long类型整数。 用U或u表示unsigned类型。
例如: -12L——(十进制long整数) -12LL——(十进制long long整数) 774545L——(十进制long整数) 076L——(八进制long整数,等于十进制数32768) 0100000L——(八进制long整数,等于十进制62) 0x12l——(十六进制long整数,等于十进制数18) 0X8000l——(十六进制long整数,等于十进制数32768) 12345u——(十进制unsigned int类型) 12345UL——(十进制unsigned long类型) 在16位字长的机器中,一旦把一个常数表示成long整数,系 统便将其存储空间扩充为4个字节。从值的大小上看,12L 与12没有区别,但它们占用的存储空间不相同
在C语言中,整型常量可以使用十进制数、八进制 数、十六进制数等几种形式书写。C语言规定,程序中 凡出现以数字0开头的数字序列,一律作为八进制数处 理;凡出现以0x开头,后面跟若干位数字的,一律作为
十六进制数处理;其它数字作为十进制数处理。
下面是合法的整型常量:
5121——(十进制正整数) 0111——(八进制正整数,等于十进制数73) 010007——(八进制正整数,等于十进制数4103) 0177777——(八进制正整数,等于十进制65537) 0XFFFF——(十六进制正整数,等于十进制数65537) 0xA3——(十六进制正整数,等于十进制数163) -32768——(十进制负整数)
2.1.1 数值的定点表示与浮点表示
定点表示和浮点表示,是C语言基本数据类型 的重要特征。为了说明什么是“定点”,什么是 “浮点”,先看π值的几种表示形式: 日常的表示法 C语言中的表示形式 3.14159×100 3.14159e0 0.314159×101 0. 314159e+1 0.0314159×102 0.0314159e+2 31.4159×10-1 31.4159e-1 3141.59×10-3 3141.59e-3
用VC++6.0 编译并运行,得到以下结果: char: 1 bytes short: 2 bytes i: 4 bytes long: 4 bytes float: 4 bytes double: 8 bytes 1.23456: 8 bytes个样
2.2 数据常量
2.2.1 整型常量 1. 整数常量的三种进制
/* 注意格式码 */ /* 注意格式码 */
例2.4 /* 文件名:ex020401.c */ #include <stdio.h> int main(void) { char c; c = 0362; printf (″%d\n″, c); return 0; } 运行结果: -14
2. 字符常量
该程序运行时先打印一个字符“Y”。这时打 印头已走到下一个位置,用控制代码\b使打印头 回退一格,即回到原先已打印好的Y位置再打印字 符“=”,两字符重迭形成人民币符号“¥”。当 然,这一输出只能在打印机上实现,而不能在显 示器上实现。因为显示器无此重迭显示功能(在显 示后一字符时原在该位置上的字符消失)。 转义字符除用来形成一个外设控制命令外, 还用来输出不能直接从键盘上输入或不能用字符 常量书写出的ASCII字符。这时要在反斜杠\后 跟一个代码值,这个代码值最多用三位八进制码 数(不加前缀)或两位十六进制数(以x作前缀)表示。
2.2.2 字符类型及其常量
1. 可打印字符
字符类型的数据在内存中以相应的ASCII代 码存放。例如,′a′的ASCII码为97,则在内存 中的二进制存储形式为:01100001。
例2.2 /* 文件名:ex020201.c */ #include <stdio.h> int main(void) { char ch; ch = ′a′; printf (″%d″,ch); return 0; } 运行结果为: 97
2.1.3 类型宽度与取值范围
C语言对不同类型的数据分配不同宽度的存储空间, 典型的存储空间宽度有:1个字节(8位)、2个字节(16位)、 4个字节(32位)、8个字节(64位)和10个字节(80位)几种。 显然,不同的长度,对应的数据的取值范围是不同的。当 然,同样长度的取值范围还与有无符号、是定点表示(整 型)还是浮点表示(实型)有关。另外还取决于所用的编 译系统。大多数编译系统对一个带符号整数的数值范围处 理为:-2n-1 ~ 2n-1-1。其中n为该整数所占的比特数。 如果一个整数所占的比特数为16,则该想整数的苑围为32 767 ~ 32 767。也有一些编译系统对一个带符号整 数的数值范围处理为:-(2n-1 –1)~ 2n-1-1。如果一个 整数所占的比特数为16,则该想整数的苑围为-32 768 ~ 32 768。
long double(长双精度浮点型) T*(指针类型)
enum(枚举) 导 出 数据类型 struct{„}(结构体类型) 用户定制类型 构造类型
union{„}(共用体类型)
T[„](数组类型) 文件类型 函数类型
2.1 基本数据类型的特征
C语言提供的基本数据类型包括 char(字符)型、int(整)型、float (单精度实)型、double(双精度实) 型。并且还可以通过使用short、long、 signed和unsigned修饰char和int,用 long修饰double,形成更多的类型。
C语言中不同长度实Βιβλιοθήκη Baidu数据的取值范围 和表数精度
宽度 (比特 ) 32 64
机内表示(位数) 数据类型 阶码 float double 8 11 尾数 23 52 符号 1 1 |3.4e-38| ~ |3.4e+38| |1.7e-308| ~ |1.7e+308| |1.2e-4932| ~ |1.2e+4932| 大约7位十进制有效数字,7位 精度 16或17位十进制有效数字,7 位精度 18位十进制有效数字,7位精 度 取值范围 有效数字和精度
浮点形式存储
3 . 1 4 1 5 9
+1
数值部分(尾数) 指数(阶 码)
2.1.2 整数的有符号类型与无符号类型
内存中的数值是以补码形式存放的,一个正数的补码 就是该数的二进制数(如10的补码为00000000 00001010)。求一个负数的补码的方法如下: 如-10的补码可以这样求: ① 先取该数的绝对值; 先取10 ② 然后以二进制形式表示; 10的二进制码为 00000000 00001010 ③ 再对其取反; 取反得11111111 11110101 ④ 然后加1; 加1,得 11111111 11110110, 即-10的16位存储形式为:11111111 11110110。
/* 定义了一个字符类型的变量ch */ /* 使用整型格式码 */
例2.3 /* 文件名:ex020301.c */ #include <stdio.h> int main(void) { char ch; int i; ch = ′A′; ch = ch + 32; i = ch; printf (″%d is %c\n″,i,ch); printf(″%c is %d\n″,ch,ch); return 0; } 运行结果如下: 97 is a a is 97
下面不是合法的整型常量:
09876——(非十进制数,又非八进制数,因为有数 字8和9) 20fa——(非十进制数,又非十六进制数,因为不 是以0x开头) 0x10fg——(出现了非法字符)
2. 整数常量类型的确定
在C语言中整数可以进一步分为short、int、 long和long logn等类型。那么,对于一个常数如 何分辨其类型呢?一般说来,有以下原则: 1)默认原则:在没有任何特别标志的情况下,可 以按照常数所在的范围,决定其类型。例如,在 16位的机器中,当一个常整数的值在十进制32768~32767(八进制数0~0177777、十六制数 0x0~0xFFFF),则被看作一个short int或int型 整数。超出上述范围的整常数,则被看作长整数 (32位)表示。例如,234、32766、0177776、 0xFFFE等被看作是int型,而-32769、32768、 0200000、0x10000等被看作是long型。
80
long double
由具体实现确定
C语言提供了一个测定某一种类型数据 所占存储空间长度的运算符“sizeof”它的 格式为: sizeof (类型标识符或数据) 当不了解所使用的编译器中的某数据 类型的宽度时,可以使用这个运算符计算 之。
例2.1 用sizeof运算符测定所用的C系统中各种类型数据的长度。 /****** 文件名:ex020101.c ******/ /****** 测定数据类型长度 ******/ #include <stdio.h> int main(void) { int i = 0; printf ("char: %d bytes.\n",sizeof(char)); printf ("short: %d bytes.\n",sizeof(short)); printf ("i: %d bytes\n",sizeof (i)); /* 计算变量i的字节数*/ printf ("long: %d bytes\n",sizeof(long)); printf ("float: %d bytes\n",sizeof(float)); printf ("double: %d bytes\n",sizeof(double)); printf ("1.23456: %d bytes\n",sizeof(1.23456)); /* 计算常量的字节数*/ printf ("double: %d bytes\n",sizeof(double)); return 0; }
ASCII字符分为可打印字符和不可打印字符 两种。在C语言程序中,可打印字符常量是用一 对单撇号括起来的一个字符,如′a′,′A′,′?′,′#′。 需要注意如下几点: • 单撇号只是字符与其它部分的分隔符,或者说是 字符常量的定界符,不是字符常量的一部分,当 输出一个字符常量时不输出此撇号。 • 不能用双引号代替撇号,如″a″不是字符常量。 • 撇号中的字符不能是单撇号或反斜杠,如′′′或′\ ′不是合法的字符常量。
• • • •
转义字符表
转义字符形式 \n \t \v \b 换行 水平制表 垂直制表 退格 意 义
\r
\f \a \\
回车
走纸换页 报警(如铃声) 反斜杠
\?
\“ \’ \ddd xhh
问号
双撇号 单撇号 1~3位八进制常数 1~2位十六进制常数
例2.5 /* 文件名:ex020501.c */ /*打印人民币符号″¥″*/ #include <stdio.h> int main(void) { printf(″Y\b=\n″); return 0; }
3. 转义字符
转义字符(反斜杠码)是C语言提供的处理一 些特殊字符(包括一些不可打印字符)方法。重 要有如下一些: 用反斜杠开头后面跟一个字母代表一个控制字符 (不可打印字符); 用\\代表字符“\”,用\′代表撇号字符; 用\后跟1到3个八进制数代表ASCII码为该八进 制数的字符; 用\x后跟1到2个十六进制数代表ASCII码为该 十六进制数的字符。
●基本数据类型的特征 ●数据常量 ●数据类型转换 ●数据的控制台输入与输出
C语言提供有丰富的数据类型:
char(字符类型)
short(短整型) 整 型 int(整型)
基 本 数据类型
浮点型 C 语 言 数据类型 void类型
long(长整型)
float(单精度浮点型) double(双精度浮点型)
不同长度整型数据的取值范围
数据长 度 (比特) 8 16 32 64 取值范围 Signed (有符号) -127~ 127 -32 767 ~ 32 767 -2 147 483 647 ~ 2 147 483 647 -(263-1) ~ 263-1 Unsigned (无符号) 0 ~ 255 0 ~ 65 535 0 ~ 4 294 967 295 0 ~ 264-1(18 446 744 073 709 551 615)
2)后缀字母标识法: 用L或l表示long类 型整数。 用LL或ll表示long long类型整数。 用U或u表示unsigned类型。
例如: -12L——(十进制long整数) -12LL——(十进制long long整数) 774545L——(十进制long整数) 076L——(八进制long整数,等于十进制数32768) 0100000L——(八进制long整数,等于十进制62) 0x12l——(十六进制long整数,等于十进制数18) 0X8000l——(十六进制long整数,等于十进制数32768) 12345u——(十进制unsigned int类型) 12345UL——(十进制unsigned long类型) 在16位字长的机器中,一旦把一个常数表示成long整数,系 统便将其存储空间扩充为4个字节。从值的大小上看,12L 与12没有区别,但它们占用的存储空间不相同
在C语言中,整型常量可以使用十进制数、八进制 数、十六进制数等几种形式书写。C语言规定,程序中 凡出现以数字0开头的数字序列,一律作为八进制数处 理;凡出现以0x开头,后面跟若干位数字的,一律作为
十六进制数处理;其它数字作为十进制数处理。
下面是合法的整型常量:
5121——(十进制正整数) 0111——(八进制正整数,等于十进制数73) 010007——(八进制正整数,等于十进制数4103) 0177777——(八进制正整数,等于十进制65537) 0XFFFF——(十六进制正整数,等于十进制数65537) 0xA3——(十六进制正整数,等于十进制数163) -32768——(十进制负整数)
2.1.1 数值的定点表示与浮点表示
定点表示和浮点表示,是C语言基本数据类型 的重要特征。为了说明什么是“定点”,什么是 “浮点”,先看π值的几种表示形式: 日常的表示法 C语言中的表示形式 3.14159×100 3.14159e0 0.314159×101 0. 314159e+1 0.0314159×102 0.0314159e+2 31.4159×10-1 31.4159e-1 3141.59×10-3 3141.59e-3
用VC++6.0 编译并运行,得到以下结果: char: 1 bytes short: 2 bytes i: 4 bytes long: 4 bytes float: 4 bytes double: 8 bytes 1.23456: 8 bytes个样
2.2 数据常量
2.2.1 整型常量 1. 整数常量的三种进制
/* 注意格式码 */ /* 注意格式码 */
例2.4 /* 文件名:ex020401.c */ #include <stdio.h> int main(void) { char c; c = 0362; printf (″%d\n″, c); return 0; } 运行结果: -14
2. 字符常量
该程序运行时先打印一个字符“Y”。这时打 印头已走到下一个位置,用控制代码\b使打印头 回退一格,即回到原先已打印好的Y位置再打印字 符“=”,两字符重迭形成人民币符号“¥”。当 然,这一输出只能在打印机上实现,而不能在显 示器上实现。因为显示器无此重迭显示功能(在显 示后一字符时原在该位置上的字符消失)。 转义字符除用来形成一个外设控制命令外, 还用来输出不能直接从键盘上输入或不能用字符 常量书写出的ASCII字符。这时要在反斜杠\后 跟一个代码值,这个代码值最多用三位八进制码 数(不加前缀)或两位十六进制数(以x作前缀)表示。
2.2.2 字符类型及其常量
1. 可打印字符
字符类型的数据在内存中以相应的ASCII代 码存放。例如,′a′的ASCII码为97,则在内存 中的二进制存储形式为:01100001。
例2.2 /* 文件名:ex020201.c */ #include <stdio.h> int main(void) { char ch; ch = ′a′; printf (″%d″,ch); return 0; } 运行结果为: 97
2.1.3 类型宽度与取值范围
C语言对不同类型的数据分配不同宽度的存储空间, 典型的存储空间宽度有:1个字节(8位)、2个字节(16位)、 4个字节(32位)、8个字节(64位)和10个字节(80位)几种。 显然,不同的长度,对应的数据的取值范围是不同的。当 然,同样长度的取值范围还与有无符号、是定点表示(整 型)还是浮点表示(实型)有关。另外还取决于所用的编 译系统。大多数编译系统对一个带符号整数的数值范围处 理为:-2n-1 ~ 2n-1-1。其中n为该整数所占的比特数。 如果一个整数所占的比特数为16,则该想整数的苑围为32 767 ~ 32 767。也有一些编译系统对一个带符号整 数的数值范围处理为:-(2n-1 –1)~ 2n-1-1。如果一个 整数所占的比特数为16,则该想整数的苑围为-32 768 ~ 32 768。
long double(长双精度浮点型) T*(指针类型)
enum(枚举) 导 出 数据类型 struct{„}(结构体类型) 用户定制类型 构造类型
union{„}(共用体类型)
T[„](数组类型) 文件类型 函数类型
2.1 基本数据类型的特征
C语言提供的基本数据类型包括 char(字符)型、int(整)型、float (单精度实)型、double(双精度实) 型。并且还可以通过使用short、long、 signed和unsigned修饰char和int,用 long修饰double,形成更多的类型。
C语言中不同长度实Βιβλιοθήκη Baidu数据的取值范围 和表数精度
宽度 (比特 ) 32 64
机内表示(位数) 数据类型 阶码 float double 8 11 尾数 23 52 符号 1 1 |3.4e-38| ~ |3.4e+38| |1.7e-308| ~ |1.7e+308| |1.2e-4932| ~ |1.2e+4932| 大约7位十进制有效数字,7位 精度 16或17位十进制有效数字,7 位精度 18位十进制有效数字,7位精 度 取值范围 有效数字和精度
浮点形式存储
3 . 1 4 1 5 9
+1
数值部分(尾数) 指数(阶 码)
2.1.2 整数的有符号类型与无符号类型
内存中的数值是以补码形式存放的,一个正数的补码 就是该数的二进制数(如10的补码为00000000 00001010)。求一个负数的补码的方法如下: 如-10的补码可以这样求: ① 先取该数的绝对值; 先取10 ② 然后以二进制形式表示; 10的二进制码为 00000000 00001010 ③ 再对其取反; 取反得11111111 11110101 ④ 然后加1; 加1,得 11111111 11110110, 即-10的16位存储形式为:11111111 11110110。
/* 定义了一个字符类型的变量ch */ /* 使用整型格式码 */
例2.3 /* 文件名:ex020301.c */ #include <stdio.h> int main(void) { char ch; int i; ch = ′A′; ch = ch + 32; i = ch; printf (″%d is %c\n″,i,ch); printf(″%c is %d\n″,ch,ch); return 0; } 运行结果如下: 97 is a a is 97
下面不是合法的整型常量:
09876——(非十进制数,又非八进制数,因为有数 字8和9) 20fa——(非十进制数,又非十六进制数,因为不 是以0x开头) 0x10fg——(出现了非法字符)
2. 整数常量类型的确定
在C语言中整数可以进一步分为short、int、 long和long logn等类型。那么,对于一个常数如 何分辨其类型呢?一般说来,有以下原则: 1)默认原则:在没有任何特别标志的情况下,可 以按照常数所在的范围,决定其类型。例如,在 16位的机器中,当一个常整数的值在十进制32768~32767(八进制数0~0177777、十六制数 0x0~0xFFFF),则被看作一个short int或int型 整数。超出上述范围的整常数,则被看作长整数 (32位)表示。例如,234、32766、0177776、 0xFFFE等被看作是int型,而-32769、32768、 0200000、0x10000等被看作是long型。
80
long double
由具体实现确定
C语言提供了一个测定某一种类型数据 所占存储空间长度的运算符“sizeof”它的 格式为: sizeof (类型标识符或数据) 当不了解所使用的编译器中的某数据 类型的宽度时,可以使用这个运算符计算 之。
例2.1 用sizeof运算符测定所用的C系统中各种类型数据的长度。 /****** 文件名:ex020101.c ******/ /****** 测定数据类型长度 ******/ #include <stdio.h> int main(void) { int i = 0; printf ("char: %d bytes.\n",sizeof(char)); printf ("short: %d bytes.\n",sizeof(short)); printf ("i: %d bytes\n",sizeof (i)); /* 计算变量i的字节数*/ printf ("long: %d bytes\n",sizeof(long)); printf ("float: %d bytes\n",sizeof(float)); printf ("double: %d bytes\n",sizeof(double)); printf ("1.23456: %d bytes\n",sizeof(1.23456)); /* 计算常量的字节数*/ printf ("double: %d bytes\n",sizeof(double)); return 0; }
ASCII字符分为可打印字符和不可打印字符 两种。在C语言程序中,可打印字符常量是用一 对单撇号括起来的一个字符,如′a′,′A′,′?′,′#′。 需要注意如下几点: • 单撇号只是字符与其它部分的分隔符,或者说是 字符常量的定界符,不是字符常量的一部分,当 输出一个字符常量时不输出此撇号。 • 不能用双引号代替撇号,如″a″不是字符常量。 • 撇号中的字符不能是单撇号或反斜杠,如′′′或′\ ′不是合法的字符常量。
• • • •
转义字符表
转义字符形式 \n \t \v \b 换行 水平制表 垂直制表 退格 意 义
\r
\f \a \\
回车
走纸换页 报警(如铃声) 反斜杠
\?
\“ \’ \ddd xhh
问号
双撇号 单撇号 1~3位八进制常数 1~2位十六进制常数
例2.5 /* 文件名:ex020501.c */ /*打印人民币符号″¥″*/ #include <stdio.h> int main(void) { printf(″Y\b=\n″); return 0; }
3. 转义字符
转义字符(反斜杠码)是C语言提供的处理一 些特殊字符(包括一些不可打印字符)方法。重 要有如下一些: 用反斜杠开头后面跟一个字母代表一个控制字符 (不可打印字符); 用\\代表字符“\”,用\′代表撇号字符; 用\后跟1到3个八进制数代表ASCII码为该八进 制数的字符; 用\x后跟1到2个十六进制数代表ASCII码为该 十六进制数的字符。