day1
1、开发环境:
vm:虚拟电脑
Linux:嵌入式产品的开发以及服务器都是用linux系统开发的
选择Linux系统中的ubuntu系统:图形界面和window和相似
与Linux尽可能的使用命令的方式执行效率高
2、目录结构:
window有多颗倒置的树
Linux系统目录结构:只有一棵倒置的树,并且树的根 /---》根目录
Linux系统支持多用户,用那个用户登录就显示该用户
~表示:家
文件系统:NTFS FAT 作用:管理组织文件,方便管理检索 管理工具
Home 有多少个用户就有多少个文件夹
不同类型用户操作的权限不一样
用户分类:
普通用户:一些权限不能执行
超级用户:root拥有最高权限
当前目录的位置
注意:没有特殊需要不要动根目录下的文件
3、Linux基本命令
linux系统一切皆是文件(所有的命令都是小写的)
命令的格式 :命令名 操作内容
ls:列出当前位置下的所有文件
如果不清楚命令是什么意思使用man 命令名 (man ls)主要看name即可
ls -a:展示当前目录下的所有的文件,包括隐藏内容(.开头的 ..开头的)
区分不同类型的文件类型:不同的颜色
ls 文件夹名字或者路径:列出指定路径下的内容
cd:切换目录,路径的名字
cd .. 返回上一级
cd . 指当前目录
cd / 到根目录
cd ~切换到路径的家
pwd:显示当前目录所在位置
绝对路径: 根目录开始 /
相对路径: home/linux
clear: 清屏
mkdir(make director):创建文件夹
touch:创建文件或路径1.c
touch ./wangsiyuan/2.txt wangsiyuan/2.txt wangsiyuan/3,txt
可以一次创建多个文件:touch 1.c 2.c 3.c
rm(remove):删除文件 rm 6.c
rm -r 删除文件夹/路径 空和非空目录都可以删除
rm -i(information) 删除文件/路径 确认是否删除 y/n
rm -ir(-代表选项 可以拼在一起)
rmdir:删除文件夹 rmdir wangsiyuan //只能删除空目录
拷贝:
cp(copy):需要拷贝文件/路径 目标文件
拷贝整个目录
cp -r 需要拷贝文件目录/路径 目标路径下
移动命令:
mv 原文件及文件夹/路径 目标路径 移动之后原文件不见了(还有重命名的功能)
mv 原文件名 新文件
4、写代码用到的工具vim
vim工具的使用:
vim的三种模式:
插入模式:只用在这种模式下才可以编辑
命令行模式: 输入命令的,复制粘贴等操作
底行模式:输入命令 保存文件 退出(关闭文件)
模式之间的切换:
命令行模式--->插入模式 键盘输入i 即可
插入模式—>命令行模式 ESC
yy复制光标所以在的一行 p复制到下一行
多行复制:nyy(复制的行数)
dd ndd删除多行
cat 1.c查看文件内容
u 撤销
命令行模式—>底行模式: :wq(write quit) :w /:q(退出不保存)
:q!->强制退出
打开文件:vim 文件名
如果这个文件存在直接打开
如果文件不存在,会新建一个
关闭文件 :
day2
1、gcc编译(GNU compiler Collection GNU编译套件)
c语言的源程序是给程序员看的-计算机只能识别01
gcc将c转成机器语言01
工作的4个步骤:
预处理-->编译-->汇编-->链接 得到可执行文件
预处理:gcc -E 3.c(源文件) -o 3.i
编译:gcc -S 3.i -o 3.s
汇编:gcc -c 3.s -o 3.o
链接:gcc 3.o -o 3
可执行文件: ./3
一步生成:ggc 源文件.c(3.c) 默认可执行文件./a.out
gcc 3.c -o main
2、计算机的基本结构:
cpu(处理器、存取器、控制器)、输入、输出设备
执行顺序:输入设备-->外存-->内存-->寄存器-->cpu-->输出设备
外存:如磁盘、u盘 。存cpu暂时用不上的数据和程序 容量大、速度慢
内存(主存取器):存放cpu需要的程序和数据 ,容量小、速度快 缺点:断电数据消失
寄存器:在cpu中存放正在执行的的程序 高速存储器,容量很小
程序:计算机能够识别的一组数据(0、1)0整 1负
3、c语言的发展史:
机器语言:010101
汇编语言:将机器语言符号化人好记忆,机器识别来不方便 ,效率低。不同的cup架构对应编译指令的不一样
手机ARM, 电脑是intel ,不同cpu架构间进行代码移植的话没法操作。
高级语言:更接近人类语言,越高级的语言,对人越友好。cpu就没有关系
c语言的特点:数据结构丰富、丰富运算符、跨平台~!
4、c的数据分类:
数值类型的数据和非数值类型的数据
数据分类:能够进行算数运算得到明确数值的概念
非数值数据:图片、语音、文字
数值的表示形式:
二进制:0-1 给计算机使用 b01001 0101
八进制:0-7 用0开头 076 满8进1
十进制:0-9 10 102 满10进1
十六进制:0-9 a-f A-F 用0X或者0x 0x98 满16进1
下午: 二进制转十进制 2的次方0开始依次加1 1000 0110 b134
十进制转二进制、八进制 右-->左 100 b1100100 0144 0x64
2-->8 2^3 3位2进制表示一个8进制数
000---0
001---1
010---2
011---3
100---4
101---5
110---6
111---7
例、0752--->b111 101 010
0632--->b110 011 010
b110 111 011-->0673
2的4次方是16 4位2进制数表示一个16进制的数
二进制 十六进制
从0~15
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
1010 a
1011 b
1100 c
1101 d
1110 e
1111 f
0x8ec--->b 1000 1110 1100
0x752--->b 0111 0101 0010
数值类型表示:ASCII(American Standard Code information interchange)
0~9 48~57
空格字符‘\0’ 0
A~Z 65 依次加一
a~z 97 依次加一
关键词(小写):
分类:
数据类型关键字:char、double、enum、float、int、long、short、struct 、union、void
控制语句:break、case、continue、default、do、else、for 、goto、if 、switch while
数据存储类型:auto extern register static
其他关键字:const修饰符---只读
Return-结束函数
Sizeof-计算内存大小
volatile(异变的)-防止编译器优化
typeof-对已存在的数据类型进行重命名
signed:有符号-->数据可以正数也可以是负数
unsigned--->无符号只能是正数
注意:内存的基本单位是字节 1个字节位8位
1byte=8bit KB MB GB TM 1024
1和10分别的存储
0000 0001
0000 1010
sizeof运算符验证,不同类型占的字节
char 1
short 2
int 4
long 8
先看符号:数据可以是正数也可以是负数
char 1 在内存中存储:
0000 0001
char -1
原码、反码、补码、并且符号位的最高位表示符号位,0正数 ,1负数。负数在内存中以补码的形式存储补码
补码? 补码=反码+1
反码? 反码=原码取反 0-->1 符号位不变
char类型 -1 在内存中的存储
原码:1000 0001
反码:1111 1110
补码:1111 1111
char类型 -5 在内存中的存储
原码:1000 0101
反码:1111 1010
补码:1111 1011
正数的补码=原码 12
原码:0000 1100
反码:0111 0011
补码:0000 1100
signed(有符号):可正可符。最高位为符号位 存储:补码的形式存储 正数的补码是原码 负数的补码 原码-->反码-->补码
unsigned(无符号):只能是整数 存储该咋存咋存无原码、反码、补码一说
浮点型数据,分为整数部分和小数部分,他在内存中的存取方式和整数的存取方式就不一样了
不能用= 只能取近似
各种数据类型的取值范围:
signed char 1000 0000~0111 1111 结果是:-128~127 --> -2^7~2^7-1
unsigned char 0~1111 1111 0~255-->0~2^8-1
signed int -2^31~2~31-1
unsigned int 0~2^32-1
short -2^15 ~2^15-1
0~2^16-1
long -2^63~2^63-1
0~2^64-1
浮点型:float 4 小点后面有6为
double 8 小数点后有15位
面试题
signed char a=255 -128-127 越界
1111 1111 -->-1(减1) -->1111 1110--->取反 1000 0001 的 -1
signed char a=243
1111 0011 -->1111 0010 -->1000 1101 的 -13
6、常量:
常量:值不可修改
变量:值可以修改
常量分类:
整型:10 100 各种进制数都可以
字符常量 : 'a'
长整型常量:78L
无符号整形常量:78U
浮点型常量:12 2.2
字符串常量:“hello world" 内存中占几个字节?12字符 串都是以"\0"结尾的 为字符串的
结束符号
\0 ASCII 转为0 故12位
代码中的常量?宏来表示
#define 名称 数值
在预编译的时候将宏的值进行替换
总结:宏在使用的过程就是一个简单的文本替换!
好处: 只要修改宏的值,一改全改
宏还可以用来表示函数,叫宏函数!
宏函数在定义的时候在定义的时候要给每一个加括号,因为在用的时候就是简单的文本替换替换