c语言中有很多的词法符号:
分类:关键字 标识符 运算符 分隔符 标点符号
关键字32个:
关键字:由系统预定义的具有特殊功能的词法符号。
存储类型:auto(自动) static(静态)external(外部引用) register(寄存器)
数据类型:int(整型) short(短整型)long(长整型) char(字符型)float(单精度浮点型)double(双精度浮点型) signed(有符号) unsigned(无符号)
构造类型:struct(结构体)union(共用体)enum(枚举)
循环类型:for while goto do break continue
选择类型:if else switch case default
其他类型:void(空)typedef(重定义)const(常量化)sizeof(计算内存空间大小) volatile(防止编译器优化) return(返回值)
标识符:
标识符用于给变量名,宏名,函数名,重定义名等
命名规则:
1.由数字,下划线,字母组成
2.开头不能是数字
3.不能与关键字重复
4.见名知意
运算符:
算术运算符:
+ - * / % ++ --
/:整数相除,向下取整(舍弃小数部分)
%:取余 只能用于整数运算!!!!
++在前:先自身+1,后做其他操作
++在后:先做其他操作,后自身+1
a++ => a=a+1=2
++a =>a=a+1=2
int a=1;
printf("%d\n",a++);//1 先输出再自身+1
printf("%d\n",a);//2 此时已经自身加过一了,所以是2
printf("%d\n",++a);//3 先自身加一再输出所以2+1=3;
--类似
逻辑运算符:
&& || !(与位运算符的&,| 区分)
&&逻辑与 全1则1
||逻辑或 有1则0
!逻辑非 :
取反(单目运算) 非真->即假
!非0=0;! 0=1;
逻辑与:前面的表达式结果为假,后面不计算(程序中不执行)
逻辑或:前面的表达式结果为真,后面不计算(程序中不执行)
位运算符:& | ^ ~ << >>
真1 假0
&:按位与 :全1则1 有0则0
|:按位或:有1则1 ,全0则0
^:按位异或:相同为0,不同为1 (异或的异或是本身)
~:按位取反(单目):0--->1 1--->0
整数的二进制的表示有三种:
原码反码补码
\ | 原码 | 反码 | 补码 |
正数 | 二进制数本身 | 二进制数本身 | 二进制数本身 |
负数 | 二进制数本身 | 原码的符号位不变,其他位按位取反就是反码 | 反码加1 |
以补码进行运算:
<<左移
像左移动:左边消失,右边补0
4<<2 4*2的2次方
0100 ->10 000 =16
x<<n x*2的n次方 ->扩大x*2的n次方倍
>>右移
以补码形式运算
向右移动:右边消失,左边补0
同理相当于缩小了2的n倍
置一公式:a|(1<<n)
置零公式:a&(~(1<<n))
a|(1<<n):a:数 n:位
关系运算符:
> < != <= >= ==
赋值运算符:
= += -= *= /= |= ^=
a+=1====>a=a+1
a*=1======>a=a*1
a|=1=====>a=a|1
条件运算符(三目运算符)
语法:表达式1?表达式2(满足时执行):表达式3(不满足时执行)
a+b>0 ? a:b //如果a+b>0,那么输出a,否则输出b
运算符的优先级:
单目运算符 ! ~ ++ --
算术运算符 * / % + -
移位运算符 << >>
关系运算符 < <= > >= == !=
位与运算符 &
异或运算符 ^ |
逻辑运算符 && ||
条件运算符 ?:
赋值运算符 = += *= /= %= ...
口诀: 单算移关与 异或逻条赋
分隔符:
tab 空格 换行符
标点符号:
, ; () {} []