1.共享文件夹
windows 与 linux 通讯
a.创建共享文件夹
虚拟机 ---> 设置 ---> 选项 ---> 共享文件夹 ---> 总是开启
b.共享文件在linux中的位置
cd /mnt/hgfs/share
a. shell 命令
echo: 输出
>
>>
cat:
clear :ctrl + l
tab:补全
b. vim 编辑器
命令行:
yy nyy dd ndd p P u crtl+r gg G gg=G dG
插入:
i I A a o O
底行:
w wq q q! x set nu set nonu /+字符串+ 回车 n N
nohl %s/old/new/g m,ns/old/new/g
c. 计算机组成
1. 输入输出
2. alu运算器
3. 控制器
4. 存储器
5. 总线
d. 数据进制转换
二进制 0 1
0b
八进制
十六进制 a
e. 数据在计算机里面的存储
补码形式存储
char a = -5;
源码:1000 0101
反码:1111 1010
补码:1111 1011
d. 标识符
i. 数字 字母 下划线 数字不能开头
ii. 不能与关键字相同
iii. 见名知意
iv. 区分大小写
v. 驼峰命名法
vi. _
e.
基础类型:
char
short int long long long
float
double
构造类型
int []
struct
enum
union
指针类型
*
空类型
void
3.变量
a. C语言中的变量:
意义: 在内存中,通过数据类型,分配空间
b. 语法格式
<存储类型> <数据类型> <标识符>
注:
数据类型: 决定分配空间 对应的大小
标识符: 分配空间的名称
4.常量:
概念:程序运行当中,不会发生变化
a. 整形常量
100 200 0b111000 072 0xaffa 3.14 0.123e+10
2.31e-10
科学计算法 0.123e+10 = 0.123 * 10^10
2.31 * 10^-10
b. 字符常量 ascii 码
'a' ascii 97 - 32
'b'
'c'
'\n' ascii 10
'A' ascii 65
'0' 48
0 '\0' ascii 0
c. 字符串常量
"hello world"
"wood"
"100"
d. 标识常量: 宏定义
i. 直接定义
#define M 10 // 没有 分号;
注意:
(1). 在定义标识常量, define 这句话结尾是没有';'
(2). 在定义宏的时候, 一般采用大写
(3). 宏在预处理阶段进行替换
(4). 在代码中一改全改
(5). 替换掉魔鬼数字
demo:
#define N 11
int arr[N]
int arr[N]
int arr[N]
switch ()
{
case add:
}
ii. 宏运算
#define M 10
#define N M - 5
int main()
{
printf("2 * N = %d", 2*N);
15, 10,
// 2 * M -5
// 2 * 10 -5
printf("N * N = %d", N * N);
M - 5 * M -5
10 -5 * 10 -5
-45
return 0;
}
注:
宏在替换的时候,是原样替换 不会增加括号
iii. 宏函数
#define ADD(x,y) ((x)+(y))
int main()
{
printf("%d\n", 2 * ADD(10, 20)); // 60
return 0;
}
5. 输出 printf
格式:
printf("控制格式", 数据列表)
控制格式:
%d : 十进制有符号的数字
%c : 字符
%s : 字符串
%p : 打印地址
char ch = 'm'
printf("%d", ch )
6. 运算符
a. 单目运算符 (只有一个操作数)
+ : 正 +5
- : 负 -5
++ : 自增 +1
int a = 10;
a++;
printf("%d\n", a);
--------------------
int a = 10;
++a;
printf("%d\n",a);
区别:
int a = 10;
int b = 5;
int c = (a++) - 5; // 6, 5
printf("a = %d", a)
int d = (++a) - 5; // 5, 6
printf("c = %d", c); 5
printf("d = %d", d); 6
注:
++a 与 a++ 不一样
++a: 先++ 然后再计算
a++: 先计算, 然后再++
int a = 5;
int x = (++a) + (++a) + (++a); // 18, 21, 24 , 22
--: 自减 1
--a
a--
*: 取地址符号
&: 取变量地址符号
!: 非 取反,
非 0 即 真
!5
False True C89
~: 按位取反
unsigned char a = 10;
~a:
0000 1010
1111 0101: 0xf5 实际结果: 0xffff fff5
// 整形提升:
1111 1111 1111 1111 1111 1111 1111 0101
f f f f f f f5
%d
补码: 1111 1111 1111 1111 1111 1111 1111 0101
反码: 1111 1111 1111 1111 1111 1111 1111 0100
源码: 1000 0000 0000 0000 0000 0000 0000 1011
--------------------------------------------------
-11
6.5 上午内容复习
a.变量
i.
像内存中申请空间 , 数据类型 大小的空间
ii.
<存储类型> <数据类型> <标识符>
b. 常量
i. 字面常量
100 0b1010 3.14 'a' 'b'
ii. 字符串常量
"hello world" "cpdd"
iii. 宏常量
#define M 10
#define N M+10
#define ADD(X,Y) (X+Y)
c. 输出
printf
%s 字符串
%d 数字
%c 字符
%p 地址
d. 运算符
1. 单目运算符
+
-
++
--
*
&
7. 算数运算符:
+
-
*
/: 整除
9/2 = 4
9.0/2 = 4.5
%: 取余
demo :
int a = 123;
int g = a % 10;
int s = a/10 %10
int b = a /100
8.移位运算符 二进制
左移运算符:
<<
char a = 5
a: 0000 0101
<< 1
----------------
0000 1010
5 << 2 : == 5 * 2 * 2 = 20
10 << 3 : == 10 * 2 * 2 * 2 = 80
0000 1010
<< 3
---------
0101 0000
---------
64 + 16 = 80
右移运算符
:补充的是符号位
>>
short a = 9 ;
a >> 2
0000 0000 0000 1001
>> 2
--------------------
0000 0000 0000 0010
9/2/2 = 2
负数移动:
int x = -3:
右移 2位
源码: 1000 0000 0000 0000 0000 0000 0000 0011
反码: 1111 1111 1111 1111 1111 1111 1111 1100
补码: 1111 1111 1111 1111 1111 1111 1111 1101|
>> 2|
---------------------------------------|-
111111 1111 1111 1111 1111 1111 1111 11|01
左移 2位
源码: 1000 0000 0000 0000 0000 0000 0000 0011
反码: 1111 1111 1111 1111 1111 1111 1111 1100
补码: |1111 1111 1111 1111 1111 1111 1111 1101|
|<< 2
|-----------------------------------------
11|11 1111 1111 1111 1111 1111 1111 110100
int b = 0x8000 0001
1000 0000 0000 0000 0000 0000 0000 0001
<< 1
----------------------------------------
总结:
左移补0 右移补充符号位
9.关系运算符:
>
<
>=
<=
!=
== : 等于
if (a = 5)
10.与运算符 (按位与) &
&: 0 与 任何数相与都是 0, 1与任何数相与 都是 任何数:
两真切为真
char a = 9;
char b = 5;
a & b :
a: 0000 1001
b: 0000 0101
---------------
0000 0001
11.异或运算符 (按位运算)^
相同为假,相异为真
char a = 10;
char b = 9;
a ^ b :
0000 1010
0000 1001
-------------
0000 0011
异或性质:
1. 0 异或任何数都能与任何数:
2. 异或两个相同的数字,会为0 且异或与顺序没有关系
0 ^ 5 ^ 5: 0
0^ 5 ^ 6 ^ 5:
0000 0101
0000 0110
---------
0000 0011
0000 0101
-----------
0000 0110
demo:
int a = 10;
int b = 5 ;
交换这两个数字:
int temp = a;
a = b;
b = temp;
要求: 不定义临时变量
a = a + b; a = 10 b = 5
a = 15 b = 5
b = a - b; b = 10 a = 15
a = a - b; a = 5 b = 10
0111 1110
0000 0010
---------
1000 0000
-128
有没有什么办法改进 字节 > 腾讯 > 阿里
3).
int a = 10;
int b = 5;
a = a ^ b;
b = a ^ b;
a = a ^ b;
11.或运算符 (位运算符)|
1 与 任何数相或 都为1, 0与任何数相或都等于 任何数
char a = 10;
char b = 5;
a | b :
0000 1010
0000 0101
---------
0f
demo:
(1)int a = fff5 40ff 将第7位置为 0 , 将这个数的第8位置位1
a: 1111 1111 1111 1111 0101 1000 1111 1111
1111 1111 1111 1111 1111 1111 0111 1111
-------------------------------------------
0000 0000 0000 0000 0000 0000 1000 0000
(a & ~(1 <<7))
a: 1111 1111 1111 1111 0101 1000 1111 1111 |
1 0000 0000
(a | (1 << 8))
(2)unsigned char a = 1011 0101 现高低位翻转
1011 0101
1010 1101
思路:
相邻位交换
相邻两位交换
相邻四位交换
1011 0101
7654 3210
相邻位交换
0111 1010
6745 2301
相邻两位交换
1101 1010
4567 0123
相邻四位交换
1010 1101
0123 4567
交换相邻的两位:
奇位数字向左移, 偶位数字向右移
1011 0101
7654 3210
1011 0101
&1100 1010
---------- >> 1
1011 0101
&0101 0101
----------
<< 1
12.逻辑运算符
逻辑&&
两个条件都成立的成立的时候才为真
逻辑||
两个条件有一个条件成立,他就会成立
短路原则:
int a = 10;
int b = 5;
if (a > 0 && a < 20)
{
printf("hehe");
}
a = 10;
if (a > 20 && a = 50)
{
printf("bye bye");
}
printf("a = %d\n", a); 50 / 10
if (a < 20 || a = 50)
{
printf("hehe");
}
printf("a = %d\n",a);
13.条件运算符 三目运算符
格式:
? :
判断问号前内容是否成立, 如果成立 则执行 : 前, 否则执行 : 后面的内容
int a = 10;
int b = 20;
int c = a > b ? a : b ;
int min = a < b ? a : b;
14.赋值运算符
+=
-=
*=
/=
>>=
<<=
=
15.逗号运算符
',': 一次执行内容,返回值是最后一个, 后面的值
int a = (10, 20 ,30 ,40 ,50);