Professional Documents
Culture Documents
第三章:数据类型
授课 师习之
湘潭大学物理与光电工程学院
本节内容
1 、数据的表示——常量、变量、标识符;
2 、数据的存储——二进制数与字节;
3 、 C 语言的基本数据类型。
C 语言的常量、变量与标识符
常量:数据本身,比如整数 1 ,小数 1.23 ,一段文字: hello,
world!
变量:内存中保存数据的存储单元。其中存储的内容称为变量值。
我们会为每个变量取一个名字,称为变量名。
常量不可以改变!
变量则可以通过赋值改变其中保存的内容。
int x, y;
x=123; y=456;
printf(" 变量 x 的值为 %d, 变量 y 的值为 %d ,一个数 %d\n", x, y,
233);
x=y; y=789;
printf(" 现在 x 的值变成了 %d, y 变成了 %d\n", x, y);
1=2; XXX 错误!常量不能赋值!
C 语言的常量、变量与标识符
C 语言中的常量:以内容本身表示数据,在代码中书写时要按照特定格
式。
类型 含义 代码书写格式 示例
1 、十进制形式,后可加一个字 1, 123, -5, 100L,
整型常量 表示整数 母 l 或 L 表示长整型; 0x1, 0x7B, 0xffff
2 、十六进制形式,以 0x 开头。
1 、小数形式,需要包含小数点;
或者后加字母 f 表示单精度, 1.23, -1., 1f, 5d,
浮点型常量 表示浮点数 加 d 表示双精度; 3e8, 1.23e-2
2 、指数形式,用字母 e 或 E 分
隔有效数字和指数部分。
以单引号 ' 括起来单个字符;
'a', 'B', '3',
字符型常量 表示单个字符 换行符等不可显示的特殊符号 '?',
用反斜杠 \ 开头的转义字符表 '\n', '\t', '\012'
示。
"Hello!",
以双引号 " 括起来的多个字符, "3.1415",
字符串常量 表示一段文本
也可以包含转义字符。 " 一 \n 二 \n 三 \n"
C 语言的常量、变量与标识符
C 语言中的宏定义,或称符号常量,就是用预处理指令为频繁用到的内
容起一个较简洁的名字来代表,格式是: #define 宏名 内容
#define PI 3.141592657
#define MY_ADDRESS " 湖南省湘潭市湘潭大学物理与光电工程学院 "
y=sin(x*PI/180);
printf(" 地址: %s\n", MY_ADDRESS);
提示:预处理指令不是 C 语言语句,末尾不要加分号!
扩展:宏定义的本质是在编译开始前对代码进行文本替换,所以如果宏名与代码
文本中其他部分有重复时可能会导致错误:
int PIESIZE; PIESIZE=12;
此段代码经预处理后会变为:
int 3.141592657ESIZE; 3.141592657ESIZE=12;
这是一个错误,因为变量名不能以数字开头。
可以将不需要修改的固定数据定义为常变量,其作用主要有:
1 、避免数据被错误地修改;
2 、编译器可以针对性地进行代码优化,提高运行效率。
const double PI=acos(-1.0); // 用反余切函数计算圆周率并定义为常量
常变量 const 与宏定义 #define 的区别:
常变量本质上也是变量,只是被标记为不可修改。
而宏定义则仅是在预处理时对代码文本做字符替换,具体是什么(常量、
变量还是表达式?)取决于定义时指定的内容。
C 语言的常量、变量与标识符
C 语言的标识符,即给变量、常变量、函数、数组、自定义类型等起的
名字,比如变量名、函数名都属于标识符。一些标识符可以由代码编写者
指定,但需要满足特定规则:
标识符只能以字母、数字、下划线组成,且数字不能出现在开头。另外,
标识符也不能与关键字或已有的其他标识符重复,包括调用的库函数名等。
关键字:即 C 语言规则中保留的具有特殊含义的标识符。包括:所有基
本数据类型关键字如 int; 类型修饰关键字,如 const ;语句关键字 if,
else , for, while, do; 等等。
内存中的存储单元可储存 8 位长的二进制数,称为一个字节。
1 、一个字节可表示 2 的 8 次方种状态,即 256 种。比如用 1 个字节表示自然数时,
可表示的范围是 0 到 255 。
2 、计算机在读取、写入内存数据或进行计算时,每次最少处理一个字节(即 8 位
长的二进制数),不能更短。
3 、内存的地址,即每个最小存储单元的序号,也是由数字表示的。如果用一个字
节长的数表示地址,则内存最大只能有 256 字节。
4 、一般的计算机还可以将连续的 2 个字节或者 4 个、 8 个字节,合并起来当作一
个数处理(读写、数学运算等),且随着计算机硬件技术的发展,还会不断变长。
5 、不同字节长度的数的运算指令不同,现代电脑一般同时具有针对多种不同字长
的数据进行运算的指令。计算机单条指令能运算的最大字节数,称为机器的字长。
比如目前主流的个人电脑是 64 位,即最大能一次计算 8 字节长的数。
C 语言的数据类型
什么是数据类型:
可以用不同长度的二进制数表示不同范围或精度的数据:
比如,用二进制表示自然数时,
1 字节长的范围是 0 到 255 ( 28-1 );
2 字节长的范围是 0 到 6 5535 ( 216-1 ),数万级别 ;
4 字节长的范围是 0 到 42 9496 7295 ( 232-1 ),数十亿 ;
8 字节长的范围是 0 到 1844 6744 0737 0955 1615 ( 232-1 ),数千亿亿 。
同样长度的二进制数也可以表示不同种类的数据:
1 、以二进制数表示自然数(如前所述)——无符号整数;
2 、将二进制其中某一位作为正负号标记,从而可以表示负数——有符号整数;
3 、将二进制中一段用于表示指数,其他表示有效数字,类似于科学记数法,则可以表示小
数或实数——浮点数。
4 、将不同的二进制数作为编号来标记每个文字字符——字符型数据、字符串。
在计算机内部,处理不同类型的数据的指令是不同的!比如,整数
1+2 ,与浮点数 1+0.2 ,从数学上讲都是加法,但计算机内部却需要使用两条不
同的指令处理——整数加法指令与浮点数加法指令。
C 语言编译器需要根据参与运算的数据的类型来决定采用什么指令,这就是为什
么 C 语言的变量或函数必须在使用前先定义或声明。
C 语言的数据类型
C 语言的基本数据类型: 基本类型
整型
基本整型 int
有符号整型 [signed] int
无符号整型 unsigned int
短整型 short [int]
有符号短整型 [signed] short [int]
无符号短整型 unsigned short [int]
长整型 long [int]
有符号长整型 [signed] long [int]
无符号长整型 unsigned long [int]
浮点型
单精度浮点型 float
双精度浮点型 double 枚举类型 enum
指针类型 *
字符型
有符号字符 [signed] char
其他类型 空类型 void 数组类型 [ ]
无符号字符 unsigned char 派生类型 结构体 struct
共用体 union
函数类型 ()
C 语言的数据类型 - 整型
整型:
类型关键词 int, unsigned int short, unsigned short long, unsigned long
常量标记 无,例如: 123 无,例如: 123 l 或 L ,例如: 123L
长度(字节) 不定,取决于编译器 不定,但不大于 int 不定,但不小于 int
数值范围 2 、 4 、 8 字节的有符号整数分别约正负: 3 万, 20 亿, 900 亿
亿。
printf 格式标记 %d ,无符号为 %ud %h ,无符号为 %uh %l ,无符号为 %ul
scanf 格式标记 同 printf 同 printf 同 printf
int x=-1; // 定义整型变量 x, 并赋值 -1 。
unsigned int n=123; // 定义无符号整型变量 n ,注意无符号整数不能为负数。
short num; // 定义短整型变量 len 。
unsigned short len; // 定义无符号短整型变量 len 。
long Count=0; // 定义长短整型变量 Count 。
unsigned long ID=202212345; // 定义无符号长短整型变量 ID 。
printf("%d %hd %ld\n", x, num, Count); //short 要加 h , long 要加
l。
printf("%u %hu %lu ", n, len, ID); // 无符号要用 u 而不是 d 。
scanf("%d %hd %ld", &x, &num, &Count); // 与 printf 相同。
C 语言的数据类型 - 整型
关键字 sizeof :用于获取某个变量或变量类型的长度(即在内存中所
占用的字节数),调用格式是:
sizeof( 变量 ) ,或者, sizeof( 变量类型 )
long a;
printf(" 变量 a 的长度是: %d\n", sizeof(a));
printf(" 类型 int 的长度是: %d\n", sizeof(int));
结果可能是:
变量 a 的长度是: 4
类型 int 的长度是: 4
在不同编译器上可能显示不同的结果。
在同一个编译器中是固定不变的,可以认为 sizeof 得到的是一个整型常数。
C 语言的数据类型 - 浮点型
浮点型:
类型关键词 float double
常量标记 f ,例如 1.0f 小数点,或 d 例如:
1.0 , 1.0d 。
长度(字节) 4 8
数值精度 6 位有效数字 15 位有效数字
printf 格式标记 %f %f
scanf 格式标记 同 printf %lf
20