目录
代码基本知识
计算机的组成:
内存单位
语言发展
数值数据 - 进制
二进制:0 1
十进制
八进制:一位8进制数据可以转换为3位二进制
十六进制:一位16进制数据可以转换为4位二进制
非数值数据 - 字符
c语言基础 - 词法符号
1、关键字(32个)
2、运算符
(1)按照 功能 分类
算术运算
关系运算
逻辑运算
逻辑 - 将数据看作一个整体,只有真(1 / 非零数据)和 假(0)
位运算
赋值运算
自增自减运算符 ++ 、--
条件运算
求字节大小
逗号运算
强制类型转换
其他
(2)按照操作数分类
(3)运算符优先级
3分隔符
4标点符号
代码基本知识
语句一般以 分号(;)作为结束标志
#include
int main()
{
printf("hellon"); //一条打印语句,将"hellon"字符串打印/输出到屏幕/终端上
// n 换行
return 0; //一条语句
}
计算机的组成:
语句一般以 分号(;)作为结束标志
#include
int main()
{
printf("hellon"); //一条打印语句,将"hellon"字符串打印/输出到屏幕/终端上
// n 换行
return 0; //一条语句
}
存储设备(寄存器(cpu内部,数量少,运行速度快)rom ram 内存(运行内存)外存(硬盘,U盘 磁盘))
运算器 进行运算
控制器 (cpu = 运算器 + 控制器)
输入设备(键盘 鼠标 话筒 摄像头 触摸板)
输出设备 (喇叭 显示器 打印机)
内存单位
1字节(byte/B)== 8位(bit)
1024B == 1kB
1024kB == 1MB
1024MB == 1G
1024G == 1T
语言发展
机器语言:二进制语言,只有 0 1
汇编语言:最接近机器语言,精简指令集
高级语言(C C++ Java python ....)
数值数据 - 进制
二进制:0 1
基数:2 (0 1)
位权
0b1010 1*2^3 + 0*2^2 + 1*2^1 + 0*2^0 ==> 十进制:10
每一位数 乘上对应位权的和就得到对应10进制数据
十进制
基数:10 (0 1 2 3 4 5 6 7 8 9 )
1638 1*10^3 + 6*10^2 + 3*10^1 + 8*10^0
八进制:一位8进制数据可以转换为3位二进制
基数:8(0 1 2 3 4 5 6 7 )
0123 1*8^2 + 2*8^1 + 3*8^0 ==> 十进制:83
十六进制:一位16进制数据可以转换为4位二进制
基数:16(0 1 2 3 4 5 6 7 8 9 A B C D E F)
0x123 1*16^2 + 2*16^1 + 3*16^0 ==>十进制:291
计算机只认识二进制,其他的进制是给人看的
计算机会自动将数据转换成10进制数显示出来
对于计算机来说:0b1101 和13 和015 和0xd 没有任何区别
十进制转换二进制:
1、除2取余(短除法)
2、凑数法: 8421
8 4 2 1 (14= 8 + 4 + 2)
1 1 1 0
3、计算机
非数值数据 - 字符
'a' '@'
ASCII -- 一个数字 对应一个字符
0 -- ' '
10 -- 'n'
32 -- ' ' 空格
48 -- '0'
65 -- 'A'
97 -- 'a'
'a' '@'
ASCII -- 一个数字 对应一个字符
0 -- ' '
10 -- 'n'
32 -- ' ' 空格
48 -- '0'
65 -- 'A'
97 -- 'a'
c语言基础 - 词法符号
关键字(32个) 运算符 分隔符 标点符号 标识符
1、关键字(32个)
标准(系统)规定好的一些有特殊含义的字符,32个
char :声明字符型变量或函数
short :声明短整型变量或函数
int :声明整型变量或函数
long :声明长整型变量或函数
float :声明浮点型变量或函数
double :声明双精度变量或函数
signed :声明有符号类型变量或函数
unsigned :声明无符号类型变量或函数
enum :声明枚举类型
struct :声明结构体变量或函数
union :声明联合数据类型
void :声明函数无返回值或无参数,声明无类型指针
if :条件语句肯定分支
else :条件语句否定分支(与if连用)
switch :用于分支语句
case :开关语句分支
default :开关语句中的“其他”分支
for :一种循环语句(可意会不可言传)
while :循环语句的循环条件
do :循环语句的循环体
goto :无条件跳转语句
break :跳出当前循环
continue :结束当前循环,开始下一轮循环
return :子程序返回语句(可以带参数,也可不带参数)
auto :声明自动变量,在栈区开辟空间,一般不使用
static :声明静态变量
extern :声明变量是在其他文件正声明(也可以看做是引用变量)
register :声明寄存器变量,申请失败,默认转成auto类型
const :修饰变量为只读变量
volatile :修饰变量,读取最新的值(防止编译器优化;从内存读取最新的值)
sizeof :计算数据类型占内存大小
typedef :用以给数据类型取别名(当然还有其他作用)
关键字分类记忆:
- 数据类型(有符号,无符号):char,short,int,long,float,double,signed,unsigned,enum
- 存储类型:auto,static,extern,register,(const, volatile,用于修饰)
- 控制语句:if,else,switch,case,default,for,while,do,goto,break,continue,return
- 构造:union,struct
- 求字节:sizeof
- 取别名:typedef
- 空类型:void
2、运算符
c语言中语法规定的运算符
(1)按照 功能 分类
算术运算
+(加) -(减) *(乘) /(除) %(取余)
10 % 3 ==> 1
10 / 3 ==> 3(去掉小数点,留整数)
关系运算
+(加) -(减) *(乘) /(除) %(取余)
10 % 3 ==> 1
10 / 3 ==> 3(去掉小数点,留整数)
关系运算
判断两个数或两者之间的关系
关系成立则结果为真(1),关系不成立则为假(0)
>(大于) <(小于) <=(小于等于) >=(大于等于) !=(不等于) ==(等于)
1 == 2 结果为假(0)
1 != 2 结果为真(1)
3 > 3 结果为假(0)
3 >= 3 结果为真(1)
逻辑运算
逻辑 - 将数据看作一个整体,只有真(1 / 非零数据)和 假(0)
&&(逻辑与): 前后都为真,则结果为真,有假(0)则假(0)
(1 > 2)&&(4 < 5) 结果为假(0)
(1 > 2)&&(4 > 5) 结果为假(0)
(1 < 2)&&(4 < 5) 结果为真(1)
(1 < 2)&&(4 > 5) 结果为假(0)
-1 && -3 结果为真(1),这种写法不会在代码中出现,非零为真
||(逻辑或): 有真(1)则真(1),有一个为真则结果为真,前后都为假,则结果为假
(1 > 2)||(4 < 5) 结果为真(1)
(1 > 2)||(4 > 5) 结果为假(0)
(1 < 2)||(4 > 5) 结果为真(1)
(1 < 2)||(4 < 5) 结果为真(1)
! (逻辑非):真变假,假变真
!(1 > 2) 结果为真(1)
!(1 < 2) 结果为假(0)
短路法则:
(1 > 2)&&(3 + 4) 因为(1 > 2)为假,结果一定为假(0),不会去计算(3 + 4)
(1 < 2)||(3 + 4) 因为(1 < 2)为真,结果一定为真(1),不会去计算(3 + 4)
位运算
&&(逻辑与): 前后都为真,则结果为真,有假(0)则假(0)
(1 > 2)&&(4 < 5) 结果为假(0)
(1 > 2)&&(4 > 5) 结果为假(0)
(1 < 2)&&(4 < 5) 结果为真(1)
(1 < 2)&&(4 > 5) 结果为假(0)
-1 && -3 结果为真(1),这种写法不会在代码中出现,非零为真
||(逻辑或): 有真(1)则真(1),有一个为真则结果为真,前后都为假,则结果为假
(1 > 2)||(4 < 5) 结果为真(1)
(1 > 2)||(4 > 5) 结果为假(0)
(1 < 2)||(4 > 5) 结果为真(1)
(1 < 2)||(4 < 5) 结果为真(1)
! (逻辑非):真变假,假变真
!(1 > 2) 结果为真(1)
!(1 < 2) 结果为假(0)
短路法则:
(1 > 2)&&(3 + 4) 因为(1 > 2)为假,结果一定为假(0),不会去计算(3 + 4)
(1 < 2)||(3 + 4) 因为(1 < 2)为真,结果一定为真(1),不会去计算(3 + 4)
位运算
位 - 指的是二进制的位
&(位与) |(位或) ~(位取反) ^(异或) >>(右移运算) <<(左移运算)
3 & 4 ==> 0011 & 0100 ==> 0000 结果为0
3 & 6 ==> 0011 & 0110 ==> 0010 结果为2
3 | 4 ==> 0011 | 0100 ==> 0111 结果为7
3 | 6 ==> 0011 | 0110 ==> 0111 结果为7
~3 ==> ~0011 ==> 1100 结果看3占内存的字节数,如果是1个字节 结果为0b11111100 0xfc
异或:相异(不同)为1,相同为0
3 ^ 4 ==> 0011 ^ 0100 ==> 0111 结果为7
3 ^ 6 ==> 0011 ^ 0110 ==> 0101 结果为5
3 >> 1 ==> 0011 向右移动1位 ==> 0001 结果为1
3 << 2 ==> 0011 向左移动2位 ==> 1100 结果为12
3 << 4 ==> 0000 0011 向左移动4位 ==> 00110000 结果为48(按照1字节来计算)
3 << 9 ==> 0000 0011 向左移动9位 ==> 0000 0000 结果为0(按照1字节来计算)
3 << 9 ==> 0000 0011 向左移动9位 ==> 0000 0000 0000 0000 0000 0110 0000 0000 结果为1536(按照4字节来计算)
赋值运算
将等号右边的值赋值给左边的变量
=
int num = 2; //num占4字节,能存放0 - 2^32-1之间的数据
复合赋值运算
+= -= *= >>= ....
num += 5;==> num = num + 5;
num -= 2; ==> num = num - 2;
......
自增自减运算符 ++ 、--
int num = 10;
num++; ==> num = num + 1; num = 11
num--; ==> num = num - 1;
++num; ==> num = num + 1;
--num; ==> num = num - 1;
做复杂运算时:
++num,先将num的值自增1,再参与其他运算
num++,向参与其他运算,在将num的值自增1
--num,先将num的值自减1,再参与其他运算
num--,向参与其他运算,在将num的值自减1
int a = 10;
int b = 20;
a +(b++); ==> a+b, b=b+1 结果为30,a = 10,b = 21
a +(++b); ==> a=b+1, a+b 结果为31,a = 10,b = 21
条件运算
int num = 10;
num++; ==> num = num + 1; num = 11
num--; ==> num = num - 1;
++num; ==> num = num + 1;
--num; ==> num = num - 1;
做复杂运算时:
++num,先将num的值自增1,再参与其他运算
num++,向参与其他运算,在将num的值自增1
--num,先将num的值自减1,再参与其他运算
num--,向参与其他运算,在将num的值自减1
int a = 10;
int b = 20;
a +(b++); ==> a+b, b=b+1 结果为30,a = 10,b = 21
a +(++b); ==> a=b+1, a+b 结果为31,a = 10,b = 21
三目运算符
(条件判断)?(结果为真执行):(结果为假执行)
int a = 10;
int b = 20;
((a>b) ? (a+=10) : (b+=10));
运行后:a = 10,b = 30;
int c = 0;
c = (((a>b) ? (a+=10) : (b+=10)));
运行后:a = 10,b = 30,c = 30;
求字节大小
计算变量/数据占内存空间的大小(以字节为单位)
sizeof(变量 / 数据)
sizeof(int);
int num = 10;
sizeof(num);
逗号运算
从左到右依次执行,取最后一次的结果
int a = 0;
int b = 0;
int c = 0;
int d = 0;
int e = 0;
e = (a=1+2, b=2+3, c=3+4, d=5+6);
运算后:a = 3,b = 5,c = 7,d = 11,e = 11
强制类型转换
()圆括号
(int) 括号内是数据类型
float num = 3.14;//单精度浮点数/小数
int n = 0;
n = (int)num; //将num强制转换为int(整型),再赋值给n变量
其他
[] 用于数组中,做为取数组中的元素,方括号内写数组下标
() 用于改变优先级,优先运算括号内的内容,括号内是表达式
. 用于结构体变量当中,作为取结构体中的一个元素
-> 用于结构体指针变量当中,作为取结构体指针中的一个元素
& 作为单目运算符时,是取地址符号,用于得到变量的内存地址(&num)
* 作为单目运算符,是取内容符号,用于得到地址中的内容
(2)按照操作数分类
[] 用于数组中,做为取数组中的元素,方括号内写数组下标
() 用于改变优先级,优先运算括号内的内容,括号内是表达式
. 用于结构体变量当中,作为取结构体中的一个元素
-> 用于结构体指针变量当中,作为取结构体指针中的一个元素
& 作为单目运算符时,是取地址符号,用于得到变量的内存地址(&num)
* 作为单目运算符,是取内容符号,用于得到地址中的内容
根据 参与运算的“操作数”,可将运算符非为单目,双目,三目
单目:
++(自增) --(自减) !(逻辑非) ~(位取反) +(正) -(负)
&(取地址) *(取内容)
双目:
+(加) -(减) * / %
> < >= <= != ==
&& || & | ^ >> <<
= += -= *= /=
三目:
?:
(3)运算符优先级
一个表达式中有多个运算,按照优先级顺序
1 + 2 * 3 先计算乘法,再计算加法,结果为7
3分隔符
起到分隔作用,将不同的词法符号分开
通过对分隔符的恰当运用,使得代码外观格式更为清晰易读,还可以帮助分析代码中的语法错误
空格 tab 换行 注释
int main()
{
int num = 0;
printf(“hellon”)
return 0;
}
4标点符号
c语言中具有特殊意义的一些符号
用于定义 变量名 函数名 宏名 自定义类型名等...
int num = 0; //num 就是标识符
int Num = 0;
命名规则:
- 由字母 数字 下划线 组成
- 不能以数字开头(只能以字母和下划线开头)
- 不能和关键字重名
注意:
- 严格区分大小写
- 一般能见名知意
命名时一般按照一定的命名规范:
驼峰命名法:混合使用大小写字母来构成变量和函数的名字
eg:ClassNum



