目录
词法符号
关键字 标识符 运算符 标点符号 分隔符
关键字
存储类型(决定变量存放的位置):auto(自动型) static(静态) extern(外部引用) register(寄存器,c用不到)
数据类型(决定变量所占的空间大小):int(整型4字节) char(字符型1字节) short(短整型2字节) long(长整型4字节) float(单精度浮点型4字节) double(双精度浮点型8字节) signed(有符号) unsigned(无符号)
int a;//(signed)int a;
构造数据类型(用户可自定义类型):struct(结构体) union(共用体) enum(枚举)
选择结构:if else switch case default
循环结构:for while goto do break continue
其他:void(空类型 在函数、指针会见到) typedef(重定义 在结构体会见到,结构体名字比较长,可以起个小名) const(常量化 readonly ) sizeof(计算数据所占空间大小) volatile(防止编译器优化 ,平常用不到) return(返回值)
标识符
命名规则:
1、由字母、数字、下划线组成
2、开头不能是数字
3、不能和关键字重复
4、最好见名知意
运算符
算术运算符、逻辑运算符、关系运算符、赋值运算符、三目运算符
算术运算符
+ - * / % ++ --
/ 整数相除,结果会向下取整
%只能用于整数之间的运算
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
++
独立成句:
int a=6;
1)++a; //a=a+1; (先自增,再赋值)
printf("%d\n",a); //7
2)a++; //a=a+1; (先赋值,再自增)
printf("%d\n",a); //7
赋值运算中:
int a=6;
1) int b=a++; //= +
printf("%d %d\n",a,b); a=7,b=6
2) int b=++a; //+ =
printf("%d %d\n",a,b); a=7,b=7
打印语句中:
int a=6;
1) printf("%d\n",a++); //6
2) printf("%d\n",++a); //7
-- 与 ++ 类似
逻辑运算符
&& || ! 0:假 1:真
&&逻辑与:全真则真,一假则假
||逻辑或:一真则真,全假则假
!逻辑非:(取反) 非真即假,非假即真
截断法则:
逻辑与运算:当前边的表达式结果为假,后边表达式不再执行,直接返回假。
逻辑或运算:当前边的表达式结果为真,后边表达式不再执行,直接返回真。
#include <stdio.h>
int main()
{
int a=5,b=6,c=7,d=8,m=2,n=2;
(m=a<b)||(n=c>d);
printf("%d %d",m,n); //m=1,n=2
}
位运算符
& | ^ ~ << >> (二进制 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); //10
先分别表示-6和11的补码:
-6原码:
1000 0000 0000 0000 0000 0000 0000 0110
-6反码:
1111 1111 1111 1111 1111 1111 1111 1001
-6补码:
1111 1111 1111 1111 1111 1111 1111 1010
11补码:
0000 0000 0000 0000 0000 0000 0000 1011
-6补码 & 11补码:
0000 0000 0000 0000 0000 0000 0000 1010==10
~(取反)
int a=5;
int b=~a;
printf("%d\n",b);//-6
5补码:
0000 0000 0000 0000 0000 0000 0000 0101
取反:
1111 1111 1111 1111 1111 1111 1111 1010
反码:
1111 1111 1111 1111 1111 1111 1111 1001
原码:
1000 0000 0000 0000 0000 0000 0000 0110==-6
<<左移 (左移n位,值等于值乘以2^n)
6<<2==24 6*2^2=24
-6<<2==-24 -6*2^2=-24
>>右移 (右移n位,值等于值除以2^n)
11>>3==1 11/2^3=1
关系运算符
> >= < <= == !=
=赋值 ==等于
赋值运算符
= += -= *= /= %=
a-=5; //=a=a-5;
a++; //a=a+1;
a+=3; //a=a+3;
条件运算符(三目运算符)
表达式1?表达式2:表达式3;
运算法则:先判断表达式1是否成立,如果成立则执行表达式2,不成立则执行表达式3;
int a=3,b=6;
c=a>b?a:b;
运算符优先级
单算移关与,异或逻条赋
单目运算符 ! ++ -- ~
算术运算符 * / % + -
移位运算符 << >>
关系运算符 < <= > >= == !=
位与运算符 &
异/位或运算符 ^ |
逻辑运算符 && ||
条件运算符 ? :
赋值运算符 = += -= *= /= %=
标点符号
, ; () [] { }
分隔符
空格 tab 换行