目录
词法符号
1.关键字 32个
概念:由系统定义的具有 特殊功能的词法符号
存储类型:决定变量存储的位置
auto(自动),static(静态),extern(外部引用),register(寄存器)数据类型:决定变量开辟的空间大小
int(整型),char(字符),short(短整型),long(长整型),float(单精度浮点型),double(双精度浮点型),signed(有符号),unsigned(无符号)构造数据类型
struct(结构体),enum(共用体),union(枚举)分支
if,else,switch,case,default循环
for,do,while,go_to,break,continue其他
void(空),const(常量化)),sizeof(计算内存空间大小),return(返回值),volatile(防止编译器优化),typedef(重定义)
2.标识符
命名规则:
1.由字母,数字,下划线_组成
2.开头不能是数字
3.不能和关键字重复
4.最好见名知意
驼峰命名:
小驼峰命名:niceDay
大驼峰命名:NiceDay
3.运算符
3.1算术运算符 + - * / % ++ --
/ :整数相除,结果向下取整(舍弃小数点)
#include<stdio.h>
int main()
{
int a=5/2;
printf("%d\n",a); //2
float a=5/2;
printf("%f\n",a); //2.000000 默认打印小数点后六位
float a=5.0/2;
printf("%f\n",a); //2.500000
float a=(float)5/2; //强制转换 只在当前所在行生效
printf("%f\n",a); //2.500000
}
% :取余(只能用于整数运算)
5%2==1
a%2=0;//偶数 a%2=1;//奇数
= :赋值
++ :自加1(单目运算)
i++;//i+i+1;
只要语句中不只有++一种操作:
++在前:先自身+1,后做其他操作
++在后:先做其他操作,后自身+1
独立成句:
int a=1000;
1)++a
printf("%d\n",a); //1001
2)a++
printf("%d\n",a); //1001
赋值运算中:
int a=1000;
1)int b=++a; //+ =
printf("%d %d\n",a,b); //1001,1001
2)int b=a++; //= +
printf("%d %d\n",a,b); //1001,1000 b=1000++ :先赋值1000并输出
打印语句中:
interesting qq=99;
1)printf("%d\n",qq++); //99
printf(”%d\n",qq); //100
2)printf("%d\n",++qq); //100
printf("%d\n",qq); //100
-- :自减1(单目)
i--;//i=i-1
运算规则同“--”
3.2逻辑运算符 && || !
注意:
1)当数字作为判断条件时,0为假,非0为真。
2)=赋值,将等号右边赋值给左边。
==等于
&&逻辑与:全真则真,一假则假 (可看成两者相乘)
代码中表示2<x<8--->: x>2&&x<8
10&&11 ====> 真:1
100>1&&'a'>'b' 假:0
|| 逻辑或: 一真则真,全假全假(可看成两者相加)
0 || 0 =====>假
!逻辑非:取反(单目运算) 非真-->则假,非假-->则真
截断法则
逻辑与:前边表达式为假,后面表达式不再执行,返回假
逻辑或:前面表达式为真,后面表达式不再执行,返回真
练习:
#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
}
#include <stdio.h>
int main(int argc, char *argv[])
{
int a = 5, b = 6, c = 7, d = 8, m = 2, n = 2,t=10;
(m = a > b) || (n = c < d)||(t=11);
printf("%d %d %d", m, n,t); //m=0 n=1 t=10
return 0;
}
3.3关系运算符 > < >= <= == !=
a!=b ===》a=10 b=20 ==》真:1
x>=10&&x<=20 20>=x>=10错误
3.4位运算符 & | ^ ~ << >>
真--1 假--0
整数的二进制表示:有3种(原码、反码、补码),整数在计算机中都是以补码形式存储、计算的
\ | 原码 | 反码 | 补码 |
正数 |
二进制数本身
|
二进制数本身
|
二进制数本身
|
负数 |
二进制数本身
|
原码的
符号位不变
,其他位按位取反就是反码
|
反码加1
|
7-->111
0 0000000 00000000 00000000 00000111
符号位:0:正 1:负数
1 0000000 00000000 00000000 00000111 原码
1 1111111 11111111 11111111 11111000 反码
1 1111111 11111111 11111111 11111001 补码
&位与: 全1则1,有0则0(乘)
5:正数 原码 反码 补码:二进制数本身
0…………0000101
-2:
原码:1.…………000010
反码:1…………111101
补码:1…………1111110
&: 0…………0000101-----> 0.......0000100:补码 (正数:原码 反码 补码一样)--->4
| 位或: 有1则1,无1为0(和)
5:正数 原码 反码 补码:二进制数本身
0…………0000101
-2:
原码:1…………000010
反码:1…………111101
补码:1…………1111110
&: 0…………0000101-----> 0.......0000100:补码 (正数:原码 反码 补码一样)--->4
^ 异或: 相同为0,不同为1
-2:
补码:1…………1111110
^: 0…………0000101 ===》1…………1111011:补码
反码:1.。。。。。。1111010
原码:1.。。。。。。0000101----> -5
~ 按位(单目)取反:1取0,0取1
~15
补码:0.。。。。。01111
~: 1.。。。。。10000 补码
反码:1.。。。。。01111
原码:1.。。。。。10000 -----> -1
<<左移:以补码的形式运算,向左移动:左边丢失 右边补0(左移几位右边补几个0)
10<<2==40
10*2^2=40
-10*2^2=-40
>>右移: 以补码的形式运算,向右移动:右边丢失 左边补符号位(右移几位右边舍弃几位)
10>>2==2
10/2^2=2
1010--->10 //2
-10/2^2=-3
公式
置一公式:a|(1<<n)
置零公式:a&(~(1<<n))
a|(1<<n):a:数 n:位
3.5赋值运算符 = += -= /= *= %=
a*=1======》a=a*1
a|=1=====》a=a|1
3.6条件运算符(三目运算符):
语法:表达式1?表达式2(满足时执行):表达式3(不满足时执行)
int a=3, b=5;
int c=a>b ? a++:++b // 6
4.运算符优先级
单算移关与 异或逻条赋
单目运算符:++ -- ! ~
算数运算符:* / % + -
移位运算符:<< >>
关系运算符:> >= < <= == !=
位与运算符:&
异或运算符:^ |
逻辑运算符:&& ||
条件运算符:?:
赋值运算符:= += *= /= %=……