一,嵌入式的基础以及linux的基础
1.linux的一些常识:
ubuntu操作系统 --- linux系统 ; terminal --- 终端 --命令终端 ; ctrl + alt + t --- 打开终端
linux -- 用户名 ; ubuntu -- 主机名 ; ~ -- 主目录 //当前所在的位置 ; $ -- 表示是普通用户
2.linux基础的的文件创建和相关操作
pwd -- 打印当前路径 ; ls -- 查看当前路径目录下内容(-l 是查看文件属性信息) ; cd -- 切换目录(去到想去的路径下) ; touch(前缀+sudo临时切换为超级用户) -- 创建一个文件 ;
mkdir(+ 1/2/3 -p 可以创建多级目录) -- 创建目录 ; cp(目录操作需要加 -r) -- 复制文件 :
mv -- 移动和命名的作用 ; rm(目录操作需要加 - r) -- 删除文件
二,数据类型
1.进制的算法:
本质就为加权求和。
十六进制 <=> 二进制 : 1位十六进制数 对应 4位 二进制数
八进制 <=> 二进制 : 1位八进制数 对应 3位 二进制数
十进制 <=> 二进制 : 除2取余法
2.数据类型种类:
整型(理解为整数),浮点型(理解为小数),字符型(理解为一个字符或字符串)
整型:int(4字节) ; short (2字节) ; long(8字节) ; long long(8字节)
浮点型:float(4字节) ; double(8字节) ; long double(16字节)
字符型:char (一字节)
3.整型的溢出:
是上下溢出,因为数据类型的不同,较长的数字赋给短字节数据类型时,会出现超范围,就会出现溢出情况。
4.转义字符:
\t---8格(包括所占的字符,且光标跳到8格之后的第一位) ; \b---退格(若前面为\n或是一个字符,就变成取消换行,和退掉字符) ; \r--移到本行开头(替换开头字符) ; \\----“\”(打印路径常用) ; \ddd---八进制代表的字符(“\133”输出为“[“)
主要用到:\n 换行符 \' 打印出 ’
5.数据类型注意的点:
@.计算机存数据,全存为补码,正数的正码反码补码都一样
@.字符数据:存到计算机 a ---> 编码值 (数值) ---> 无符号的整数
@.赋值的时候最好写成类型相同的
@.数据存储:高高低低--高位数据 存储在 高地址处 ;低位数据 存储在 低地址处
@.有符号数:有一位为符号位包含了 正数 ,负数 ; 无符号数 :不包含符号位, 包含非负数
@.关于各个数据的存储范围:signed int [-2^31 ~ +2^31-1] ; unsigned int [ 2^32 - 1] signed short [-2^15 ~ +2^15-1] ; unsigned short [0~2^16-1] ;
signed short [-2^15 ~ +2^15-1] ; unsigned short [0~2^16-1] ;
@.符号类型 的存储(0正 1负) | (float指数位8位)指数+127(指数的大小为-128~127 | 尾数(小数点后的二级制) | (double指数位11位)指数+1023 |
@. 字符对应的数值主要用到一个ASCII表的查询和了解(在vim中,指令“man ascii”打开ASCII表)
三,关系运算符和关系表达式
算术类型:+ - * / %(取余) ++(自增) --(自减) 赋值运算 逗号运算
关系大小记忆口诀:“单算移关与,异或逻条赋”--------- 单目运算符(eg:++ ; -- ; ! ;&)>算术运算符>移位运算符>关系运算符(eg:< ; > ; ==)>与>异>或>逻辑运算符>条件运算符>赋值运算符
1.隐式类型转换:
悄然发生的转换。
必转的 : int <----char/short
低精度类型 与 高精度类型混合运算 ,此时 低精度 往 高精度转
强制类型转换:(类型)表达式 eg:(float)10--------10.0(转换为浮点型)
2.关系运算符和关系表达式需要注意的点:
@. /: 除数不可以为0
@. 浮点型不能做求余运算 ; 求余运算 第二操作数 不能是 0 ; 求余运算的结果的符号取决于左操作数的符号(eg:-4%3=-1 ; 4%-3=1)
@. printf("%d%d\n",i,++i)是错误的 ,会有不确定的运算
@. 贪心原则:从左到右逐个字符的扫描表达式,看这些字符能否,尽可能多的结合成c的运算符 不能结合,就还是字符本身。
@. ++的运算数 必须是左值,能被&到的值(常量,匿名变量和表达式是右值)
四,输入输出
类型:单个字符输入输出:getchar ; putchar (可以:putchar(getchar()))
格式化的输入输出:printf ; scanf
字符串的输入输出:gets ; string 输出一段字符(‘abc’)
1.格式输入输出:
1.1 printf(输出)
printf (“格式输出函数”,可变参数变量或值) --- 最常用的
printf( 格式控制,输出表列):
%d类型的:
%cl 。按十进制整型数据的实际长度输出。 ; %md (也可用于下面的格式)为指定的输出字段的宽度。如果数据的位数%小于 m, 则左端补以空格, 若大于 m, 则按实际位数输出 ;ld 。输出长整型数据(eg输出long)
%o 格式符。以八进制整数形式输出。
%x 格式符 。以十六进制数形式输出整数。
%u 格式符。用来输出 unsigned 型数据,即无符号数,以十进制整数形式输出。
%c 格式符。用来输出一个字符。
%s 格式符。用来输出一个字符串。
%f 格式符。用来输出实数(包括单、双精度),以小数形式输出。
1.2 scanf(输入)
简单理解,就是用户可以从键盘上输入指定字符或字符串到计算机里,达到给程序赋值的目的。
格式输入输出函数与printf输入输出函数大同小异,就是输入的格式。
2.输入输出的注意点:
@. C语言不提供输入输出功能 , 是由输入输出函数库提供的;
@. 浮点型数据输入时 ,类型要匹配(int - %d ; long - %ld ; long long - %lld);
@. 多个数据输入时, 以空白符作为分割符(等同于多个空格,tab);
@. scanf 输入表列参数注意一定要写 & (取地址)
@ %*c : 表示 跳过一个 数据项(占位符号识别参数时是一个一个识别的)
五,流程控制
结构:顺序结构(一行一行执行代码) -- 分支结构 -- 循环结构
1.分支结构
1.1 运算关系
算数>关系运算>逻辑运算>赋值>逗号
关系运算:0 为 假 ; 1 为 真 (一般用在关系运算中)
逻辑运算: 与( && )---- 一假则假 ; 或( || )--- 一真则真 ; 非( !)----- 真假相对 ;
1.2 if 语句
一般来说 : if ; else if ; else 一起用的
先判断if , 为假判断else if , 都为假则跳转else直接执行 ; 为真直接执行
1.3 条件运算符
形式:表达式?printf(a):printf (b):printf(n)- a为真执行 ; a 为假执行b ; b为假执行n
1.4 switch语句
switch(表达式必须为整型) { case 常量表达式: 语句;break(跳出语句); default(不符合case的语句在这里执行): 语句;break; }
2.循环结构
类型:goto语句 --- while --- do while --- for
循环的构成是由初始条件(i=0)+趋于结束的条件(i++)+结束条件(i<100)
2.1 goto
goto 语句标号(相当于设定语句的标签)
goto可以去到你想去的标签语句,不算严格意义上的循环,循环上可用性不高
2.2 while()
while() { 语句; }
判断(表达式) 真的话执行,然后重复判断,为假时停下(简单理解为语句中的值不满足表达式内容时循环停下)
2.3 do while()
do { 语句 ; } while()
先执行语句,最后判断条件,为假时停下,为真时,循环
2.4 for
for(表达式1;表达式2;表达式3){ 语句 ; }
表达式1为初始条件 ; 表达式2为结束条件 ; 表达式3为趋于结束的条件(i++)
2.5 break 和 continue 语句
break表示跳出本层循环,直接用,循环中(除了goto之外)
continue结束本次循环,继续下一次循环
3.流程控制分支结构的注意点:
@. 与和或 : && 截断特性(短路特性)-- 左边式子为真(假),右边不运算(考虑运算的先后确定右边式子会不会有一个自运算)
@. if()要加{},但是括号后不要加 ;
@. 切勿else()--- 否则已经是逻辑的最后一个选择了,无需判断
@. case后面是常量,不能跟变量
@. switch 只会匹配一次
@. default 书写位置没有明确规定,如果写前面,一定要加上break
4.循环流程需要注意的点:
@. while()后面不要加分号
@. if语句表达式2省略代表没有结束条件,一直循环
@. if语句表达式1只执行一次