词法符号
关键字 标识符 运算符 标点符号 分隔符
1.关键字
1.1存储类型(决定变量存放的位置):
auto(自动型) static(静态) extern(外部引用) register(寄存器)
1.2数据类型(决定变量所占的空间大小):
char(字符型1)
int(整型4) short(短整型2) long(长整型4)
float(单精度浮点型4) double(双精度浮点型8)
signed(有符号) unsigned(无符号)
1.3构造数据类型(用户可自定义类型):
struct(结构体)
union(共用体)
enum(枚举)
1.4选择结构:
if else switch case default
1.5循环结构:
for while goto do break continue
1.6其他:
void(空类型 在函数、指针会见到)
typedef(重定义 在结构体会见到,结构体名字比较长,可以起个小名)
const(常量化 readonly 和void一起在指针会讲)
sizeof(计算数据所占空间大小)
volatile(防止编译器优化 ,平常用不到)
return(返回值)
2.标识符
命名规则:
- 由字母、数字、下划线组成
- 开头不能是数字
- 不能和关键字重复
- 最好见名知意
3.运算符
算术运算符、逻辑运算符、位运算符、关系运算符、赋值运算符、三目运算符
3.1算术运算符
++ – + - * /
需要注意的问题
3.1.1 整数相除,结果会向下取整 需要转换成浮点类型
int a=5/2;
printf("%d\n",a); //2向下取整
float a=5/2;
printf("%f\n",a); //2.000000
float a=5/2.0;
printf("%f\n",a); //2.500000
float a=(float)5/2; //强制转换,只在当前这个位置进行转换
printf("%f\n",a); //2.500000
3.1.2 %只能用于整数之间的运算(浮点无意义)
3.1.3 a++ 与++a的区别 ++在后,后赋值 在前先赋值与()等无关,不影响其数值 --同理
例如
a=10 ,b=5
c=(b++)+a ----> c=10+5=15
3.2逻辑运算符
&& || ! 0假 1真
&&逻辑与: 全真则真,一假则假
||逻辑或 :一真则真,全假则假
!逻辑非:取反 非真即假,非假则真
printf("%d\n",15>9&&9>11); //0
printf("%d\n",15>9||9>11); //1
printf("%d\n",15>9&&!(9>11)); //1
(重点)截断法则:
逻辑与运算:当前边的表达式结果为假,后边表达式不再执行,直接返回假。
逻辑或运算:当前边的表达式结果为真,后边表达式不再执行,直接返回真。
例题: a=1,b=2,c=3,d=4,n=7 (a>b)&&(n=c<d) n=?
答案: n=7;(注意截断法则)
3.3位运算符
& | ^ ~ << >>
位运算使用的都是二进制 0 1
规则
& 位与:全1则1,有0则0
| 位或:有1则1,全0则0
^异或:相同为0,不同为1
~取反:0–》1 1–》0
示例
int a=6,b=11;
int c=a&b;
//6: 110
//11:1011
//&: 0010==2
printf("%d\n",c);
补充:整数的二进制表示有3种:原码、反码、补码
例如: int a=8,b=-6(因为int有4字节,占32位二进制数)
a 原码 0000 0000 0000 0000 0000 0000 0000 1000
反码 0000 0000 0000 0000 0000 0000 0000 1000
补码 0000 0000 0000 0000 0000 0000 0000 1000
b 原码 1000 0000 0000 0000 0000 0000 0000 0110(第一位1表示符号位,1为负0为正)
反码 1111 1111 1111 1111 1111 1111 1111 1001
补码 1111 1111 1111 1111 1111 1111 1111 1010
<<左移 >>右移
除二进制计算外,另有简便方法
如
6 <<左移 两位 即62^2
6<<2==24 -->622=24
负数也适用
-6<<2==-24
-62^2=-24
>>右移两位 即11/2^3
11>>3==1 --> 11/2^3=1
3.4关系运算符
< > <= >= != == 相等 (区分:=赋值 )
3.5 赋值运算符
= += -= *= /= %=
3.6条件运算符(三目运算符)
表达式1?表达式2:表达式3;
运算法则:先判断表达式1是否成立,如果成立则执行表达式2,不成立则执行表达式3;
取两者最大值
int a=3,b=6; c=a>b?a:b;
3.7运算符优先级
单算移关与,异或逻条赋
单目运算符 ! ++ – ~
算术运算符 * / % + -
移位运算符 << >>
关系运算符 < <= > >= == !=
位与运算符 &
异或运算符 ^ |
逻辑运算符 && ||
条件运算符 ? :
赋值运算符 = += -= *= /= %=