一、Linux

1.Shell命令

1.终端快捷键:Ctrl+Alt+T
2.pwd: 显示路径
3.ls:列出当前目录下的所有文件
参数:
	-l 列出目录文件下的所有文件 + 详细信息
	文件类型   权限	 	连接数  所属用户	 组     文件大小     时间戳   名字
			drwxr-xr-x    2 	hqyj 	hqyj 	4096 7月  14 08:46 Desktop
权限:
	r:读
	w:写
	x:执行
------
	-a 列出隐藏文件
4.cd:切换当前目录
	cd + 路径 : 路径之间用“/”隔开
	.  : 当前位置
	.. : 上一级位置
	cd : 不跟任何参数,直接回到Home目录下
	cd -  : 回到上一次所在的目录
5.mkdir : 创建目录
6.rmdir : 删除为空的目录(只能为空)
7.touch : 创建文件
	如果已存在的文件,再用touch会更新时间戳
8.rm : 删除文件
	rm -r:递归删除目录下的所有子目录以及文件
9.clear : 清屏
10. tab(快捷键) 自动补全
补充:
    复制:	cp
        1. 复制单个文件
            cp file1.txt file2.txt
        2. 复制文件到指定目录
            cp file.txt /home/user/documents/
        3. 递归复制目录(包含子目录和文件)
            cp -r src/ dst/
	移动: mv
		1.移动文件到指定目录
			mv file.txt documents/
		2.移动多个文件到目录
			mv file1.txt file2.txt backup/
		3.递归移动目录
			mv src/ dst/

文件类型

文件类型 类型符 描述
普通文件 - ASCLL文本文件、二进制可执行文件、以及硬件连接
字符设备文件 c 原始输入输出设备文件,每次I/O传输仅操作一个字符
块设备文件 b 块输入/输出设备文件
目录文件 d 包含若干文件和子目录
符号链接文件 l 只保留了文件地址,不是文件本身
管道文件 p 进程间通信的机制,用于进程间通信的暂时文件
套接字文件 s 用于进程间的通信(应用程序接口)

vim/vi编辑器 gedit

vi/vim	文件名
三种模式:插入模式、命令行模式、底行模式

插入模式:
	按下a、i、o进入插入模式,可以编辑文件

命令行模式:
	用于复制、剪切、粘贴
	yy 	-- 复制光标所在行
	nyy	-- 多行复制,按下数字n就复制光标后的n行
	p  	-- 粘贴内容到光标所在位置
	dd  -- 剪切光标所在行
	ndd -- 多行剪切
	u	-- 撤回
	ctrl + r -- 反向撤销(恢复)
	gg = G 自动对齐

底行模式:
	:w 	--	保存
	:q 	--	退出
	:wq -- 	保存并退出
	:x  --	保存退出
	:!	-- 	强制执行
	:wq!--  强制保存并退出
	

gcc编译器

gcc 文件名		--	编译文件
	如果编译没有错误,才会生成可执行文件(默认生成的文件名为a.out)
gcc 文件名 -o 自定义名字	--	自定义文件名

./文件名		--	运行文件

补充命令

查看文件内容:
	cat		文件名
	more	文件名 分页
	less	文件名	分页

二、概念

1.程序

2.计算机数据

计算机上存储的所有信息文件等,都是由一系列的二进制组成

数值数据:能够经过计算机运算得到明确数值
非数值数据:其他数据

数值数据

凡是按进位的方式计数的数值叫做进位计数制,简称进位制
	二进制
	八进制
	十进制
	十六进制
基数、数位的权
	基数:是指进位制中允许使用的基本数码个数, 例如常用的十进制基数为:10 ,可选用0-9
	位权:大小是以基数为底,数字所在位置的序号为指数的整数次幂

进制之间的转换

其他转十进制:
	(1)位权展开
	.
	.
	.

非数值数据

文字、符号、图像、语言、逻辑信息等,也是以0、1的形式存在,成为非数值数据

字符数据主要有数字、字母、通用符号等,ASCII

3.C语言 基础

词法符号

任何高级语言都有自定义的词法符号个支持的数据类型
词法符号是语言的基本组成单位,数据类型是数据的基本属性
词法符号是程序设计语言中由若干字符组成的有意义的最小语法单位

关键字

分隔符

运算符

算数运算符

+  -  *  /  %
除法运算符:
	整数相除等于整数
取模运算符:
	只能对整型数据取余

逻辑运算符

真:非0为真
假:0

&& 逻辑与

|| 逻辑或

逻辑与和逻辑或在实际使用中,如果左边的表达式可以决定整个表达式的值的时候,右边的表达式将不执行

! 逻辑非

关系运算符

>	<	>=	<=	==	!=
运算结果为  真 1 / 假 0

位运算符

^、&、|、~、<<、>>
正数: 原反补码都一样
负数:
    原码:最高位为符号位,其余为数值为
    反码:符号位不变,其余数值为取反
    补码:反码加1

负数补码推原码:
    补码取补码	/	反推
    
& 与运算 有0则0,全1为1
| 或运算 有1则1,全0为0
^ 异或运算 相同为0 相同为0,不同为1

5 & -2  //正数 与 负数做位运算  转补码
0000 0101	//5
1111 1110	//-2补码
0000 0100	//结果
    
>>右移,高位补符号位
	0000 0111	>>	2		0000	0001
    
    1000 0111	>> 	2
转补码
    1111 1001
右移2位
    1111 1110
转原码
    1000 0010
    
<<左移,左边移出,右边补0
    -1
    1000 0001 << 1
    转补码
    1111 1111
    << 1
    1111 1110
    转原码
    1000 0010

规律及常见用法
    (1)<< >>
    左移N位,相当于*2^n
    右移N位,相当于/2^n
    (2)置位(|) 清零(&)操作
    	清零第4位
    	char a = 0xFF;
    	a = a & (~(0x1<<4));

赋值运算符

=、+=、-=、*=、/=、<<=、>>=
复合赋值运算符一定要在赋值运算符左边和右边是同一个变量的时候才能使用
a = a + 10 ===> a+=10;

例如:
    a += 20 + 10;  // a = (20 + 10)
    a *= 20 + 10;  // a = (20 + 10)

递增、递减

++、--
(1)++、--单独使用
	int a = 10;
	a++;	// ++a    a = a + 1;
    //a的值为11
(2)运算中,a++、--,先运算(自增)后取值
		 ++a、--a,先取值后运算
	int a = 10,b;
    b = 10 + a++; // b = 20 , a = 11
(3)在函数printf中,从右往左算
	printf("%d   %d",a++,++a);		//11	12
	printf("%d	 %d",++a,a++);		//12	10	区别在于内存和寄存器值的改变(见图片)

地址运算符

&

逗号运算符

表达式1,表达式2,……表达式n;
逗号表达式整体的值等于最后一个表达式的结果

int a = 10;
int b = 20;
a = (10,10,a+20,b+a);		//a=30

sizeof(运算符)

sizeof运算符用于计算数据类型、变量所占空间大小,单位:字节
最小单位:bit(位)
基本单位:Byte(字节) == 8 bit
    	1 kB == 1024 B
sizeof(数据类型);
sizeof(变量名);
sizeof 变量名;

三目运算符

C语言中唯一一个3个操作数的运算符
    表达式1 ? 表达式2 : 表达式3
    根据表达式1的真假,执行。
        为true -- 执行表达式2
        为false -- 执行表达式3
作用:	用于简单的判断
int a = 100 , b = 20 , c , d = 500;
c = (a>b)?(a > d ? a : d) : (b > d ? a : d);	//从左往右依次判断计算
c = 500;

数据类型

逻辑类型(bool)

#include <stdbool.h>
true : 真
false : 假

基本数据类型

char	1字节		8位二进制
存储字符

有符号:-128 ~ 127
	char a;
	signed char a;
无符号:0 ~ 255
	unsigned char a;
整型:
    short 2字节
    int	4字节
    long 8字节
    long long 8字节

浮点型:
    float(单精度浮点型) 4字节	5~7位有效位数
    double(双精度浮点型) 8字节	15~16位有效位数
    浮点数不是一个精确值,是一个大约值
    

常量

整型常量
浮点型常量(实数)
字符型常量(ASCII码)
字符串常量   "string"
标识常量(宏定义)
    #define <标识符名称> <常量>