目录
一、数据类型
1、数据类型
2、常量和变量
2.1标识符
2.2常量
2.3变量
3、整型数据
3.1整型常量
3.2整型变量
4、实型数据
4.1实型常量
4.2实型变量
5、字符型数据
5.1字符常量
5.2字符变量
6、字符串常量
7、不同数据类型间的转换
二、运算符和表达式
1、常见运算符
2、优先级口诀
3、类型转换运算
4、自增、自减运算
5、关系运算符
6、逻辑运算符
7、条件运算符
标识符是用来给变量、符号常量、函数、数组、类型、文件等命名的有效字符序列,区分大小写
命令规则:
1、以字母(大小写均可)或者以下划线开头 ,数字不能作为开头
2、随后可跟若干下划线、字母、数字
3、不同的c编译系统对标识符的长度要求可能不同,建议不要过长
4、不能使用关键字
关键字又称为保留字,是C语言中规定有特定意义的标识符。
C语言关键字如表:
void |
char |
short |
int |
long |
float |
double |
signed |
unsigned |
struct |
union |
enum |
typedef |
auto |
static |
extern |
const |
register |
return |
if |
else |
switch |
case |
default |
do |
while |
for |
break |
continue |
goto |
sizeof |
volatile |
inline |
restrict |
_Bool |
_Complex |
_Imaginary |
常量,即常数,在程序中不可变的量 常量又分为直接常量、符号常量和const常量
1、直接常量
通过它本身的书写格式就可以判断该常量的类型 例如0是整型,3.14159是实型常量等
2、符号常量
用一个标识符代表的常量,格式如下:
#define 符号常量 常量
(1)符号常量的定义又称为宏定义,是预处理命令不是C语句 结尾没有分号
(2)和变量相区分 习惯用大写
(3)符号常量的值在作用域内不能改变,
若其定义在函数外部,则符号常量的有效范围是从定义 开始到本文件结束,
若其定义在函数内部,则符号常量的有效范围是从定义开始到其所在的函数结束
(4)如果想要提前结束符号常量的使用 可以使用 #undef 命令,格式如下
#undef 符号常量
(5)优点:
见名知意:从符号常量的命名可以知道该常量是什么
一改全改:程序直接使用直接常量,则需要修改多处,符号常量只需修改定义的值就行
使用#undef 后 会报错 因为该符号常量已经被停用,不存在了
3、const常量
const是C语言的关键字,如果用它来修饰变量,则变量被作为常量处理。它的常用定义和使用格式有两种:
const 数据类型 常量名 =初值 或 数据类型 const 常量名 =初值
例如: const double PI =3.14或 double const PI=3.14; 在程序中 不能修改它的值
const 修饰的常量和#define定义的符号常量有什么区别?
前者是数据段 后者是代码段
变量的值在程序中是可以改变的,变量任何时刻都只有一个值,对它赋予新值时就覆盖掉了原来 的值。
1、变量命名 :变量名必须是合法的用户标识符
计算机根据每个变量的类型为其分配一个相应大小的存储空间,在该存储空间中存取变量的值。变量的起始字节的地址(首地址)称为变量的地址,变量名可以看成变量存储空间的名字。
1字节有8位 1byte=8bit
2、变量定义
先定义变量,系统给其分配存储空间,进而再进行赋值和取值操作,即先给房间再给值,
格式如下
数据类型 变量名1,变量名2;例如 int a,b;注意 :如果我们没有赋值,则计算机会随机给变量一个值。
3、变量赋值
变量要先定义,后赋值。赋值的一般格式为:变量=常量(也可以是变量、表达式等)
=是赋值运算符 它实现的的功能是:将运算符右边的值复制一份传递给左边的变量,要求赋值符号左端必须是变量。
4、变量初始化
若在定义变量的同时给它赋值,称为变量初始化。格式如下:
数据类型 变量 = 常量(也可以是变量、表达式);等价于如下
数据类型 变量;变量=常量;
注:只有变量有空间,同一变量定义只能一次,赋值可以多次;定义必须写在其他语言前面
int const a;const之后的这个值(a)是不能变的。
变量定义和可执行语句的顺序
由于定义语句放在了可执行语句的后面,因此产生了错误没有输出结果,
应该将a=1和int c交换位置
整型常量也称为整数(integer number),其表示方法如下:
十进制整型常量与普通整数形式一致,如:123、-456、0。
八进制整型常量,以0开头,如:0123表示八进制数123.即 等于十进制的83。-012,等于十进制的-10,八进制是“逢八进一位”,所以八进制常量中的数字必须小于8,例如:019是非法八进制数
十六进制整型常量,以0x或0X开头,例如:0x123表示十六进制数,即等于十进制的291;十六进制是“逢十六进位”,十六进制常量除了0~9之外,还有a~f依次表示10~15
各进制常量后面都可以加后缀,加U或u表示无符号数(unsigned),指该常量不能为负数;加L或1表示长整型(long int)。例如012U,0X3aU为无符号类型常量,123L是长整型常量。
整型变量的基本类型符是int,根据数值的取值范围不同,可以在int前根据需要加上修饰符扩展整型。具体取值范围如下:所有的后缀都可以大写也可以小写
说明 |
数据类型名 |
字节 |
取值范围 |
[有符号]短整型 正数、负数都可以 [ ]都可以不写 |
[signed] short [int] |
2 |
-215 ~ 215 -1 即:-32768 ~ 32767 |
无符号短整型 不能为负数 |
unsigned short [int] |
2 |
0 ~ 216 -1 即:0 ~ 65535 |
[有符号]整型 |
[signed] int |
4 |
-231 ~ 231 -1 即:-2147483648 ~ 2147483647 |
无符号整型 不能为负数 |
unsigned [int] |
4 |
0 ~ 232 -1 即:0~4294967295 |
[有符号]长整型 |
[signed] long [int] |
4 |
-231 ~ 231 -1 即:-2147483648 ~ 2147483647 |
无符号长整型 不能为负数 |
unsigned long [int] |
4 |
0 ~ 232 -1 即:0~4294967295 |
long4>=int4>=short2,其中4和2表示字节,一个字节有八位即1byte=8bit
在32位操作系统中,visual C++6.0会为每个整型变量分配4个字节来存储整型常量,(即32位,首位是符号位,符号位是0表示正数,符号位是1表示负数)整型常量在内存中是以二进制补码形式存放的。一个正数的补码和其原码的形式相同。
所有整数在内存中都以补码的形式存储,补码:正数的补码和原码是一样的,负数的补码等于原码按位取反再加1.
数据溢出:正数超出一个变成最小的,一个最小的变成最大的,如下:
实型也称为浮点型,实型常量,也称为浮点型常量,实数或者浮点数。在c语言中,实数只采用十进制格式,它有两种表示形式
(1)十进制小数形式:由数字0~9和小数点组成,例如:10.0、0.0、-1.34等
(2)指数形式:由十进制加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成。一般形式:a E n(其中a为十进制,E为阶码标志,n为阶码,阶码只能使用十进制整数表示)它表示的值是:。例如:2.1E5、3.7E-2等。
实数常量默认是双精度数(double)有效位是15~16位,如果要指定单精度数(float类型的常量),有效位数是6~7位,可以加上后缀“f”或“F”。如果要指定长双精度数(long double)有效位数是18~19,可以在后缀加上“l”或“L”。
实型变量分为单精度(float)、双精度(double)和长双精度(long double)三种。
取值范围如下:
说明 |
数据类型名 |
字节 |
取值范围 |
单精度 |
float |
4 |
-3.4×10^(-38) ~ 3.4×10^38 |
双精度 |
double |
8 |
-1.7×10^(-308) ~ 1.7×10^308 |
长双精度 |
long double |
8 |
-1.7×10^(-308) ~ 1.7×10^308 |
注:C语言中小数点前面或后面的0可以省略,但是不能只有小数点自身,如:4e-3和0.4e-3等效
字符常量指其值保持不变的字符,它用单引号括起来,例如‘a’、‘x’、‘d’、‘?’、‘ ’等都是字符常量。字符常量区分大小写,例如‘a’和‘A’是不同的字符常量。字符常量的值是该计算机所使用的字符集中此字符对应的数值,以整数形式存储。最常用的标准字符集是ASCII字符集,此字符集中,字符‘a’的值是97,字符‘A’的值是65。
还有一类特殊形式的字符常量,以“\”开头,将反斜杠后面的字符转换含义,起控制作用,称为转义字符,例如“\n”代表一个换行符,在屏幕上将光标换到下一行。常用的转义字符表如下所示
转义字符 |
转义字符的作用 |
ASCII 码 |
\n |
回车换行,将光标位置移到下一行开头 |
10 |
\r |
回车不换行,将光标位置移到本行开头 |
13 |
\t |
水平制表(Tab),将光标位置移到下一个制表位置 |
9 |
\b |
退格,将光标位置移到前一列 |
8 |
\f |
换页,将光标位置移到下一页开头 |
12 |
\a |
响铃 |
7 |
\0 |
空操作符,字符串结束标志 |
0 |
\’ |
单引号字符 |
34 |
\’’ |
双引号字符 |
39 |
\\ |
一个反斜杠字符 |
92 |
\ddd |
1到3位八进制数所代表的字符 |
|
\xhh |
1到2位十六进制数所代表的字符 |
字符型变量用来存放字符常量,用类型符号char定义字符变量。占用一个字节的内存空间,可以存储的整数范围如下:
说明 | 数据类型名 | 字节 | 取值范围 |
[有符号]字符型 | char | 1 | -128~127 |
无符号字符型 | unsigned char | 1 | 0~125 |
通过字符型数据的值来实现字符的大小写转换:
数字字符使用:
可以看出ASCII码值是9的字符,输出四个空格,而字符9输出显示的9.
转义字符使用:
字符串常量是使用双引号括起来的字符序列,简称字符串。C语言规定,字符串常量的结尾通常会自动添加一个“字符串结束标志”,即“\0”,以便于系统判断字符串是否结束。
注意:“a”是字符串常量,‘a’是字符常量,两者在存储上有区别
“a”在内存中占两个字节
a | \0 |
'a'在内存中占一个字节
a |
横向是必定的转换、纵向上低类型向高类型;转换,同类型不转换。
口诀 | 说明 |
括号成员第一; | 括号运算符[ ] () 成员运算符. -> |
全体单目第二 | 所有的单目运算符(自右向左),例如++ ,--,+(正),-(负)指针运算*& |
乘除余三,加减四 |
这个余指的余运算,即% |
移位五,关系六 | 移位运算符:<< >>,关系:> < >= <=等 |
等于(与)、不等排第七 | 即===和!= |
位与、异或和位或 | 这几个都是位运算:位与(&)异或(^)位或(|) |
“三分天下”八九十 | |
逻辑或跟与 | 逻辑运算符:||和&& |
十二跟十一 | 注意顺序:优先级(||)低于优先级(&&) |
条件高于赋值 | 三目(条件)运算符优先级排到13级,只比赋值运算符和“,”高 |
逗号运算级最低 | 逗号运算符优先级最低 |
在运算过程中有两种常用的类型转换方法
第一种是运算符对数据类型的转换,在运算过程中不必用户指定,C编译系统自动进行类型转换,也称为隐式转换。例如3+6.5;3是int类型,6.5是double类型,则先将3转换为double类型,再跟6.5进行计算,结果也是double类型。
第二种是强制类型转换。当自动类型转换不能实现目的时,可以利用强制类型转换运算符将变量或表达式转换成需要类型的中间变量,原来变量、变量或表达式的类型不会发生改变。
其一般形式为:(类型名)(常量、变量、表达式)
例如:(double)a (int)a+b (int)(a+b)
(1)自增
前置自增 ++i,功能:i=i+1;++i=i;即先将i变量的值增加1,然后将自增后的i值赋给表达式++i;
后置自增i++,功能:i++;i=i+1;即先将当前的i值赋给表达式++i,然后再将i的值增加1。
(2)自减
前置自减--i,功能:i=i-1;--i=i;即先将i变量的值减少1,然后将自减后的i赋值给表达式--i;
后置自减i--,功能:i--=i;i=i-1;即先将当前i的值赋给表达式--i,然后再将i的值减少1。
自增和自减都只能用于变量,而不能用于常量和表达式。如++3或(i+j)++都不合法
自增和自减是单目运算符,优先级是第二级,结合方向是自右往左
(1)<(小于) (2)=<(小于等于) (3)>(大于)
(4)>=(大于等于) (5)==(等于) (6)!=(不等于)
(1)~(4)优先级为第六级,(5)和(6)为第七级
关系表达式就是用关系运算符将变量和常量、表达式连接起来的式子。关系表达式的值是一个逻辑值,若关系表达式成立,则值为真,否则为假。由于C语言没有逻辑型数据,所以1表示真,0表示负。
(1)&& 逻辑与 例如:a&&b a和b都为真时,运算结果为1,否则为0
(2)|| 逻辑或 例如:a||b a和b有一方为真时,运算结果为1
(3)!逻辑非 例如:!a a为真时,运算结果为0,否则为1
!的优先级是第二级,结合方向是自右向左;&&是第十一级,||是第十二级,比算术和关系运算符优先级低一些,两者的结合方向是自左向右。
类型 | 真(1) | 假(0) |
char | ‘\0’以外的char值 | ‘\0’ |
int | 0以外的int值 | 0 |
float | 0.0f以外的float值 | 0.0f |
double | 0.0以外的float | 0.0 |
指针 | NULL以外的指针值 | NULL |
逻辑表达式有一个短路特性逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。一般分两种情况:
(1)a&&b&&c 只在a为“真”时,才判别b的值;只有在a、b都为真时,才能够判别c的值;
(2)a||b||c 只在a为假时,才判别b的值;只有在a、b都为假时,才能判别c的值。
条件运算符是C语言中唯一的三目运算符,即需要3个运算对象。由条件运算符及运算对象组成的式子称为条件表达式。一般形式为:表达式1?表达式2:表达式3
条件运算符规则:先计算表达式1,若表达式1的结果成立,计算表达式2,并将表达式2的结果作为整个条件表达式的值。若表达式1的结果不成立,计算表达式3,并将表达式3的结果作为整个条件表达式的值。其执行过程如下:
说明:
(1)优先级是第13级,仅高于赋值运算符,低于关系运算符和算术运算符。
(2)结合方向为“自右向左”。
(3)表达式1、表达式2、表达式3类型可以不同,表达式值取较高的类型。