C语言中的数据类型
- C数据类型
- 1.1 基本类型
- 1.1.1 数值类型
- 1.1.1.1 整形
- 1.1.1 数值类型
- 1.1 基本类型
- C数据类型
1) 短整型 short(short int)
2) 基本(整)型 int
3)长整型 long(long int)
引申:C语言如果表示整数的正或负,有无相应类型: 在以上整形类型前加上unsigned 表示正整数类型;以上类型如果没有用 unsigned 修饰,缺省就是正整数类型,把这样的类型称为无符号类型 在以上整形类型前加上 signed 表示负整数类型;把这样的类型称为有符号整数
- 1.1.1.2 浮点型
1) 单精度型 float
2) 双精度型 double
- 1.1.2 字符类型 char
- 1.2 构造类型
- 1.2.1 数组
- 1.2.2 结构体 struct
- 1.2.3 共用体 union
- 1.2.4 枚举类型 enum
- 1.3 指针类型
- 1.4 空类型 void
- 1.5 定义类型 typedef

- C 语言数据的基本表现形式(在C语言中,数据的基本表现形式是常量和变量)
- 常量(在执行程序的过程中,其值不能被改变的量)
- 常量分类:
- int、float、double、char 和 符号常量。
- 1.1 整型常量
- 1.1.1 整型常量表示
- 常量分类:
- 常量(在执行程序的过程中,其值不能被改变的量)
可用十进制、八进制和十六进制三种形式表示:
(1)十进制整型常量:由0至9的数字组成以及+与-,不能以0 开头。如:123、-456.4
(2)八进制整型常量:以0(数字0)为前缀,其后由0到7的数字组成,没有小数部分。如:0123、-011
(3)十六进制整型常量:以0x或0X为前缀,其后由0到9的数字和A~F(或a~f) 字母组成,没有小数部分。如:0x12、-0x11
进制转换:
其他进制 -> 十进制:
“按权相加” 权:数位表示的单位
- 例子:
- 025 28^1 + 58^0 21
- 0x25 216^1 + 516^0 37
十进制 -> 其他进制 :
不断除以 进制数,直到商为0,反向记录余数;
八进制 <—> 十六进制:
借助二进制转换
概念:
字节(byte): 内存单元的单位
二进制位(bit):一个字节又划分为 8个二进制位
整型常量中的长整型数据可用L作后缀表示。如:1234L等。
- 1.1.2 整型常量的分类
三种类型的整型常量:
有符号 与 无符号 基本整型常量

有符号 与 无符号 长整型常量
有符号 与 无符号 短整型常量
- 1.2 浮点型常量
- C语言中的浮点数(float point number)就是平常所说的实数(real number)
- 1.2.1 浮点型常量的表示形式
(1) 十进制小数形式,如0.123, 1.23, 123. 0, -17.8, 0.0等。
(2) 指数形式(科学记数法),如1230 可以表示为1.23e3或1.23E3
注意:
① 在符号 e 的前面必须要有数字。
② 在符号 e 的后面必须为整数,不能是带有小数点的实型数。
实型常量的后缀用F(或f)表示单精度型。后缀用L(或l)表示双精度型。不加后缀默认为双精度。
- 1.3 字符常量
- 用单引号括起来的一个字符,如:'a'、'A'、'?'等
- 转义字符常量: 反以斜杠‘\’开头的字符序列 ,表示控制及不可见的字符。如:

- 1.4 字符串常量
用一对双引号括起来的一个字符序列,如:“How do you do?”、“China”、“a”、“$123.45”等。可以输出一个字符序列,如:Printf(“How do you do.”);
字符串常量“a”与字符常量’a’的区别
系统自动为字符串常量加上结尾符“\0”,使所占内存单元多一个,但字符串常量的长度不变,可用sizeof( )运算符来测量。
1.5 符号常量
定义一个标识符来代表一个常量。如:用PI代表圆周率Л,即 3.1415926。(注意:定义符号常量时往往大写)
好处:
增加可读性。
增强了可维护性。
定义符号常量:
用编译预处理命令#define(宏定义)
格式:
#define 标识符 字符串
标识符和字符串之间用空格隔开。句末不用分号。
例:
#define PI 3.1415926
#define PRICE 38.5
例2:在程序中使用符号常量
#define PRICE 30 /定义符号常量PRICE/ #include
- 变量(在程序执行过程中其中的值可以被改变的量)
- 2.1 本质
- 代表的是一块内存空间的标识,用来存放数据,也就是说,变量是数据的载体,变量是用来承载数据的。
- 2.2 变量应该有一个名字
- 以便按名字引用(使用)变量。可以通过变量名称访问该变量代表的内存空间,从而访问内存空间中的数据。
- 2.3 变量定义格式
- 变量格式:数据类型 变量名列表
- 2.1 本质
- 变量(在程序执行过程中其中的值可以被改变的量)
例: #include
- 2.3.1 定义变量的过程
- 1. 系统在内存中开辟内存空间;
- 2. 开辟的内存空间的大小,取决于变量的类型;
- 3. 以变量名作为该内存空间的表示(名称);
- 4. 使用变量,相当于操作变量代表的内存空间;
- 注意:在C语言中,要求对所用到的变量使用前必须先强制定义,即:先定义,后使用。
- 2.3.2 变量名的命名规则
- 变量名必须以字母或下划线开头,后面可以跟若干个字母、数字或下划线;
- 变量名不能与C语言中已经存在的标识符重名
- 变量名、变量值、变量所占存储单元之间的关系

- C语言中的标识符
对标识符的定义 用来标识对象的名字的有效字符。对象包括变量、函数、数组、类型等。即标识符就是对象的名字。
标识符的构成
C语言规定标识符只能由字母、数字和下划线3种字符组成,且第一个必须为字母或下划线(不能以数字开头)。
编译系统对大小写敏感。变量名一般用小写字母表示。
C语言中有3类标识符
关键字
有32个,系统有特定的含义和用途,如:float、 int、if、else等,不能用作变量名;
系统预定义的标识符
如系统提供的库函数名sin、printf、main及预编译命令define、include等;
用户标识符
用户定义的标识符,用来给程序中的变量、自定义函数、符号常量、数组、结构体、共用体、文件等命名。、
C语言中有32个关键字,不允许用户再用来定义标识符
12个预处理命令
- 不同类型的数据在内存中的存放形式
- 用来存放整型数据的变量
- 我们定义一个整型的变量,C编译系统实际是在内存中分配了能够存储一个整型数据的存储空间,并用变量名来标识这个空间,对该空间的使用也就可以通过变量名来访问。
- 若不知道所用的C编译系统对变量分配的存储空间大小,可用sizeof运算符查询,如:printf(“%d,%d,%d\n”,sizeof(int),sizeof(short),sizeof(long));
- 说明:
- 一个类型说明语句可以同时定义多个同类型的变量,各变量之间用逗号“,”分隔。多个同类型的变量也可以用多 个类型说明语句定义;
- 用类型说明语句定义的变量只是说明了为这些变量分配了存储空间,以便用于存放与之相同类型的数据,在未对这些变量赋值前,这些变量中(即存储空间中)的值是随机的;
- C语言允许在定义变量的同时为变量赋初值;
- 在为长整型变量初始化或赋值时,如果被赋数据为基本整型常量,则C编译系统自动将被赋数据转换成与相应变量的类型一致;
- 由于各种整型变量所占的字节数有限,因此,它们所能存放的整数有一定的范围。
- 说明:
- 例:整型变量的定义与使用
- 用来存放整型数据的变量
include void main() { int a,b,c,d; unsigned int u; a=12; b=-24; u=10; c=a+u; d=b+u; printf(“ a+u=%d, b+u=%6ld\n”,c,d); } 运行结果为: a+u=22 , b+u=-14
- 1.1 整型数据在内存中的存放形式
- 数据在内存中是以二进制形式存放的。
- 如果有以下语句:
int i; /定义i为整型变量/ i=10; /给i赋整数10为值,若在内存中占2字节/
- 则十进制数10的二进制形式为1010,在内存中的实际存放形式为: 0000000000001010
- 实际上,数据在内存中是以补码的形式表示的
- 正数的补码和原码(即该数的二进制形式)相同;
- 负数的补码是将该数绝对值的二进制形式,按位取反再加1。
- 例如-10的补码是:1111111111110110。因为:

- 可见:在存放整数的存储单元中,一般情况下,最左边的一位用来表示符号位。符号位为“0” 时表示正数,符号位为“1”时表示负数。
- 浮点型变量
- 2.1 浮点型变量的分类
- 浮点型变量

- 2.2 浮点型数据在内存中的存放形式
- 浮点型数据在内存中按照指数形式存放。系统将一个浮点数分成小数部分和指数部分,分别存放。
- 
- 在内存中存放分为3部分:
最高位:符号位(0:正 1:负)
指数位:
单精度(浮点数二进制的指数 + 127)
双精度(浮点数二进制格式的指数 + 1023)
小数部分:浮点数二进制的小数部分
单精度:23 bits
双精度:52 bits
- 例子:
- 23.125 = 10111.001 = 1.0111001 * 2^4则内存中存放数据为 01000001101110010000000000000000
- 3. 字符变量
- 字符型变量用来存放字符常量。
- 字符型变量的定义方式如为:char 变量名列表

- 字符数据在内存中的存储形式及其使用方法
- 将一个字符常量存入一个字符变量,实际上并不是把该字符本身存入内存单元中,而是将该字符对应的ASCII码存入内存单元中。

- 由前可见,在内存中字符数据的存储形式与整型数据的类似,这就使得字符型数据和整型数据之间可以通用。即一个字符数据既可以字符形式输出,也可以整数形式输出。
以字符形式输出时,系统先将内存单元中的ASCII码转换成相应字符,然后输出。
以整数形式输出时,直接将ASCII码作为整数输出。
因此,可以对字符数据进行算术运算,这时相当于对其ASCII码进行算术运算。


- <br />
- 各类数值型数据间的混合运算
- 1)整型、实型、字符型数据间可以进行混合运算,如:10-‘a’*1.5
- 运算时,参加运算的两个数据如果类型不同,则首先将其类型转换成一致再运算,转换规则是:将优先级低的类型转换到优先级高的类型
- 注意:在混合运算过程中,系统所进行的类型转换并不改变原数据的类型,只是在运算过程中将其值变成同类型后再运算。
- 1)整型、实型、字符型数据间可以进行混合运算,如:10-‘a’*1.5

- 注意:在混合运算过程中,系统所进行的类型转换并不改变原数据的类型,只是在运算过程中将其值变成同类型后再运算。
- 2)C语言提供了强制类型转换运算,可得到一个所需类型的数据。强制类型转换的形式为:(类型名)(表达式)

- 特别需要说明的是,在强制类型转换过程中,并不改变原变量的类型,只是在运算过程中将其值转换类型后再运算。
- 例:

- 主要的算术运算符和算术表达式
- C语言运算符和C算术表达式简介
- 1.1 C运算符
- 1)算术运算符 + - * / %
- 2) 关系运算符 > < >= <= == !=
- 3) 逻辑运算符 ! && ||
- 4) 位运算符 << >> ~ ! ^ &
- 5) 赋值运算符 = += -= *= /= %=
- 6) 条件运算符 ? :
- 7) 逗号运算符 ,
- 8)指针运算符 * &
- 9) 求字节数运算符 sizeof
- 10)下标运算符 [ ]
- 11) 强制类型转换运算符(类型)
- 12)分量运算符 . ->
- 13)其它 如函数调用运算符( )
- 2.2 表达式
- 所谓表达式是将操作对象用运算符连接起来的符合C语法规则的式子
- 1) 算术运算符 2+6.7*3.5+sin(0.5)
- 2)关系运算符 x>0, y<=z+6
- 3) 逻辑运算符 x>0&&y>0 表示x和y同时大于0时条件成立
- 4)赋值运算符 a=5.6
- 5)逗号运算符 x=3, y+=4, z-=8 结果是最后一个表达式的值8
- C语言规定了运算符的优先级和结合性。在表达式求值时,按运算符的优先级别高低次序执行。如果运算对象两侧的运算符优先级别相同,如a+b-c,则按规定的“结合方向”处理。
- 2.3 主要的算数运算符
- 2.3.1 基本的算术运算符
- 1.1 C运算符
- C语言运算符和C算术表达式简介
加法运算符(双目运算符),或正值运算符(单目运算符),如 3+5,+3。
- 减法运算符(双目运算符),或负值运算符(单目运算符),如 5-2,-z。
乘法运算符(双目运算符),如y3。
/ 除法运算符(双目运算符),如5/3。注:两个整数相除得整数商
% 模运算符(双目运算符),或求余运算符。只适用于整型数据,如12%5的值为2,32%11的值为10等。
这些算术运算符的运算顺序与数学上的运算顺序相同。
2.3.2 C语言运算符的优先级
- 算术表达式和运算符的优先级与结合性
- 算术表达式是指用算术运算符和括号将运算对象连接起来的、符合C语法规则的式子, 称为C算术表达式。 如:a*b/c-1.5+’a’
- 对于算术表达式要注意以下几个问题:
- 1)表达式中各种运算符的运算顺序,必要时应加括号,
- 例如:
- 1)表达式中各种运算符的运算顺序,必要时应加括号,
- 算术表达式和运算符的优先级与结合性
(a+b)/(c+d)≠a+b/c+d。
- 2) 注意表达式中各运算对象的数据类型,特别是整型相除。C语言规定,两个整型量相除,其结果仍为整型。
- 例如:
7/6的值为1;
4/7的值为0;
(1/2)+(1/2)的值为0,而不是1。
- 优先级与结合性
- 在表达式求解时,先按运算符的优先级别高低次序执行,若一个运算对象两侧的运算符的优先级别相同,则按规定的结合方向处理。
- 各种运算符的结合方向:
1) 算术运算符的结合方向是:“自左至右”,即运算对象先与左边的运算符结合,例如:a-b+c 先执行a-b,然后在执行加C运算
2) 有些运算符的结合方向是:“自右至左”,即运算对象先与右边的运算符结合,例如:i++
3) 若一个运算符两侧的数据类型不同,会自动转换成同类型后进行运算
- 自增++ 、自减--运算符
- ++i,--i 表示在使用该运算对象之前使先它的值增1或减1,然后再使用它,即使用的是增1或减1后的值。
- 例如:
语句x=++n;相当于以下两个语句的运算结果:n=n+1;x=n;
- i++,i-- 表示在使用该运算对象之后才使它的值增1或减1,即使用的是增1或减1前的值。
- 例如:
语句x=n++;相当于以下两个语句的运算结果:x=n;n=n+1
- 注意:
- 1)增1与减1运算符只适用于整型变量或字符型变量,而不能用于其他类型的变量;
- 2) 增1与减1运算符不能用于常量或表达式。例如,--5, (i+j)++等都是非法的。
- 赋值运算符
- “=”称赋值运算符,其作用是将一个数据赋给一个变量。如: a=5不要理解为“等号”。
- 执行赋值运算的结果,是将右边的数据存入左边变量所对应的内存单元中。
- 赋值规则
- 如果赋值运算符两侧的类型不一致,则在赋值时要进行类型转换,转换规则为:
实型 -> 整变量
舍去小数部分。
int a=5.5; a中为5。
整型 -> 实变量
数值不变,以浮点形式存储。
字符型 -> 整变量
放在整形变量低8位。保持原值不变原则。int a=‘A’;
- 赋值表达式
- 主要实现赋值运算的表达式。
- 一般形式:
<变量>=<表达式>
如: a=5 y=2*x+3 a=a+1 不是衡等
- 作用:将右边表达式的值赋给左边的变量。赋值表达式的值取左边变量的值。
- 逗号运算符
- 用途:将若干个表达式“串联”起来,如:3+5,6+8;(a=3*5,a*4),a+5
- 别称:顺序求值运算符
- 逗号表达式
- 一般形式为:表达式1,表达式2,...,表达式n
- 求解过程:按从左到右的顺分别计算各表达式的值,其中最后一个表达式n的值就是整个逗号表达式的值。
- 本章小结:
- 各类数据在内存中所占的字节数。ANSI C没有具体规定,由各C编译系统自行决定。常见的有两种:
- short型2字节、 int型4字节、 long型4字节
- 对字符型都是1字节
- 对浮点数一般都是:float型4字节、 double型8字节
- 可用运算符sizeof(类型名)或 sizeof(变量名)测出其字节数。
- 区别字符和字符串。单引号括起来的是字符,占1个字节;尚引号括起来的是字符串,占n+1个字节,因为有结尾符“\0”。一个字符(char)型变量中只能存放1个字符。
- 自增++和自减—运算符,只能用于变量,不能用于常量和表达式。
以上内容整理于 幕布文档
set 限制解除
