1.语法符号
词法符号若干字符组成的有意义的最小语法单位。按照词法符号在程序中的作用,可以分为:关键字、 标识符、运算符、分隔符和标点符号。
1.1关键字
1.存储类型:
auto static extern register
2.存储类型:
char(字符型) short(短整型) int(整型) long(长整型) float(浮点型) double(双精度浮点型) unsigned(无符号) signed(有符号)struct(结构体) union(共用体)enum(枚举)void(空类型)
3.控制语句:
if(条件语句) else(条件语句中否定分支) while(循环语句的循环条件) do (循环语句的循环体)for(一种循环语句) switch(开关语句) case(开关语句分支)default(开关语句中其他分支) break(中断循环) continue(继续下一轮循环) goto(跳转) return(返回)
4.其他:
sizeof(计算数据所占空间大小) const(声明只读变量)typedef(重命名) volatile(防止被编译器优化)
1.2标识符
C语言的命名规则如下:
1) 标识符由一个或多个字母、数字或下划线组成
2)标识符的第一个字符必须是字母或下划线
3)标识符不能与任何关键字相同
1.3运算符
算术、逻辑、关系、位、赋值、其他运算符
1.算术运算符:+,-,*,/,%,++,--
2.逻辑运算:!,&&,||
3.关系运算符:<,>,>=,<=,==,!=
4.位运算符:&,|,~,^,<<,>>
5.赋值运算符:=,+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=
6.其他运算符:三目运算符,sizeof()
1.4分隔符
通过对分隔符的恰当运用,使得代码的外观格式更为清晰易读,还可以帮助分析程序中的语法错误
1.5标点符号
C语言中的标点符号有逗号、分号、冒号、花括号、圆括号。标点符号的作用与分隔符相似,但用法非常严格,有着明确的语法规定。有些标点符号出现在表达式中时,当作运算符使用。
(1) 逗号
在定义变量语句中,用于分隔变量名
在函数的参数表中,用于分隔函数参数
(2)分号
用于表达式语句的结束
在for循环语句中,分隔括号内的三个表达式
单独出现,构成一条空语句
(3) 冒号
用于三目运算符
用于switch case语句中case块中
(4) 花括号
用做枚举类型定义的开始和结束
用做数组初始值定义的开始和结束
用做函数体的开始和结束
用做语句块的开始和结束
用做结构类型定义块的开始和结束
(5) 圆括号
用在函数头定义中,作为参数表的开始和结束
用在流程控制语句中,作为条件表达式的开始和结束
用在函数调用中,作为参数表的开始和结束
运算符&表达式&数据类型
1.变量和基本数据类型
1.1变量的概念
变量就是在程序中发生变化的量,变量有类型。
变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。
1 字节(byte) = 8 位(bit)
1.2定义格式
类型 | 存储大小 | 值范围 | |
char | 字符类型 | 1 字节 | -2^7 到 (2^7-1) |
unsigned char | 无符号字符类型 | 1 字节 | 0 到 (2^8-1) |
int | 整数类型 | 4 字节 | -2^31 到 (2^31-1) |
unsigned int | 无符号整数类型 | 4 字节 | 0 到 (2^32-1) |
short | 短整型 | 2 字节 | -2^15 到 (2^15-1) |
unsigned short | 无符号短整形 | 2 字节 | 0 到 (2^16-1) |
long | 长整型 | 4 字节 | -2^31 到 (2^31-1) |
unsigned long | 无符号长整形 | 4 字节 | 0 到 (2^32-1) |
float | 单精度浮点型 | 4字节 | 有效数据6-7位 |
double | 双精度浮点型 | 8字节 | 有效数据15-16位 |
64位操作系统:long类型是8字节
1.3初始化格式
既可以直接初始化 如:int a=10;
也可以先定义再赋值 如:int a;
a=10;
1.4局部变量和全局变量
1.生命周期
2.作用域
3.五个区域:局部变量在栈区
全局变量在全局区
局部变量和全局变量的区别
局部变量 | 全局变量 | |
1.定义位置 | 在函数体内 | 在函数体外 |
2.存储位置 | 栈区 | 全局区 |
3.生命周期 | 同函数体共存亡 | 同整个程序共存亡 |
4.作用域 | 作用域函数体内部 | 作用域整个程序 |
5.初值 | 未初始化,值是随机 | 未初始化时,值是零 |
2.常量
2.1常量的定义
程序中不会发生变化的值,存在于常量区
2.2常量的分类
2.21字符型常量
类型为char 从ascii码表中全是字符型常量 如:'A',字符型常量是用''括起来的
原码、反码和补码:
- 最高位表示符号位,正数是0,负数是1。
- 正数原码、反码和补码都是一样的。
- 负数要用补码来计算:
- 原码就是在数值前面直接加符号表示
- 反码等于原码的符号位不变其余按位取反
- 补码等于反码加一
例如: -5
原码:1000 0101
反码:1111 1010
补码:1111 1011
2.2.2字符串常量
用""括起来,每个字符串常量都有'\0'作为字符串结尾的标志(虽然有但不显示别吃亏了)
如"hello"
2.2.3整型常量
整型就是类型为整数的常量,包括从负数到零到正数的所有整数。可以用二进制、八进制、十进制和十六进制表示。
2.2.4浮点型常量
浮点型常量就是类型为浮点的常量,包括从负数到零到正数所有的浮点数。
float double
2.2.5指数常量
用科学计数法表示
如:3*10^8 --> 3e8
2*10^-12 --> 2e-12
2.2.6表示常量(宏定义)
宏定义:起到标识作用的
(1)只是单纯的进行文本替换,在预处理的时候进行。
(2)遵循标识符的命名规则
(3)一般大写表示
格式: #define 宏名 常量或表达式
特点:只能单纯替换,不要进行手动运算 (原样替换,替换完了再计算)
如:#define ONE 1
3.运算符和表达式
3.1算术运算符
/:整数相除 向下取整
%:只能用于整数运算取余 如12%3=2
++:自增(这个挺坑得多练)
--:自减(同上)
3.2赋值运算符
= += -= *= /=
3.3关系运算符
> < <= >= == !=
用来判断两者的关系,返回1或0。
运算符 | 名称 | 示例 | 功能 | 缩写 |
< | 小于 | a<b | a小于b时返回真,否则返回假。 | LT |
<= | 小于等于 | a<=b | a小于等于b时返回真,否则返回假。 | LE |
> | 大于 | a>b | a大于b时返回真,否则返回假。 | GT |
>= | 大于等于 | a>=b | a大于等于b时返回真,否则返回假。 | GE |
== | 等于 | a==b | a等于b时返回真,否则返回假。 | EQ |
!= | 不等于 | a!=b | a不等于b时返回真,否则返回假。 | NE |
3.4逻辑运算符
&& || !
&&:全真为真 有假就假
||:一真全真 全假则假
!:真的变假 假的变真
截断法则
逻辑或||运算中: 如果前面的表达式为真,则后面的表达式不执行。
逻辑与&&运算中: 如果前面的表达式为假,则后面的表达式不执行。
3.5位运算符
& 位与
全1则1 有0就0
1111 0101&1111 1101 =1111 0101
| 位或
有1则1 全0为0
1111 0101 | 1111 1101=1111 1101
^ 异或
不同为1 相同为0
1111 0101 ^ 1111 1101=0000 1000
~ 取反
按位取反
0111 0101 ~ 1000 1010
原码 反码 补码
正数: 本身 本身 本身
负数: 本身 符号位不变其余位按位取反 反码+1
~15
正数原码:0000 1111
正数补码:0000 1111
取反~: 1111 0000
~-1:
原码: 1000 0001
反码: 1111 1110
补码: 1111 1111
~ : 0000 0000
<<左移
左移几位,右边补几个零
8<<2 = 32: 1000左移两位得到100000
-5<<3:
-5原码:1000 0101
反码: 1111 1010
补码: 1111 1011
<<3:(111)1101 1000(-40)
1010 0111 (符号位不变,其余按位取反)
1010 1000 (再上一步基础上+1,得到-40的原码)
右移>>
右移几位,左边补几个符号位,正数补0负数补1。
置一公式:a | (1<<n)
置零公式: a & (~(1<<n))
3.6特殊运算符
三目运算符:表达式1?表达式2:表达式3
先求解表达式1,如果结果为真(非0)就把表达式2的值作为整个表达式的取值,否则(表达式1结果为假也就是0)那么讲表达式3的值作为整个表达式的结果。
sizeof运算符格式
sizeof()