第一课:计算机组成、进制、移位、补码和编译链接

2018-10-16  本文已影响0人  鲁卡Mr

一、计算机组成

输入、输出、运算、控制、存储
CPU作用:运算和控制、逻辑、寄存器

内存作用:协调CPU和硬盘的交互
缓存作用:协调CPU和内存的交互

题外:
排序好不好:样品规模、存储介质、数据结构

那冒泡排序和选择排序哪个更好?
看具体使用场景。
例如磁带。
可以应用冒泡排序,因为冒泡排序可以顺序访问,相邻交换。
而选择排序不是顺序访问,是随机访问。要先找出最小的数,置于一端,然后再找到最小数置于一端,依次进行下去。这时效率(速度)就没冒泡排序好。

局部插入排序:可以用于纸牌,因为代价小,而应用在麻将上将不适合,因为代价大。

二、进制

1、普通进制转换
例:
xyz(n) = x * n^2 + y * n^1 + z * n^0

以十进制为例:
求得xyz(10)百位十位个位的个位数:
那么,
xyz % 10 ---->求得个位数
xyz / 10 % 10 --->求得十位数的个位数
xyz / 100 -->求得百位数的个位数

二进制转十六进制
对二进制每4位进行分割,将其转化为对应的十六进制,如果分割的二进制位数不够,将自动补零。
例如: 1101110
二进制: 110 1110
0110 1110
16进制: 6 E

3、小数的进制:

可以用乘2取整法:
例子:

0.358(10)=XXXX(2)

          0.358
     x           2
     --------------
           0.716      ---->取0
     x           2
     --------------
           1.432      ---->取1
           0.432
     x           2
     --------------
           0.864      ---->取0
     x           2
     --------------
          1.728      ---->取1
     ....................
    这是乘不尽的

结果为:0.0101.......

除非小数位是0.5的幂(例如0.5(0.51),0.25(0.52),0.125(0.5^3).......),这样乘2,直到等于1,才会结束。否则将一直计算下去。

三、浮点数

例子:
f == 0.3f;

(f - 0.3) <= 0.0000001 && (f - 0.3) > = -0.0000001
-------------
这是精度要求(据实际要求而定)

四、移位

A/C = A * (1/C )= A * ( (2^n)/C) * (1/(2^n)) = A * ((2^n)/C) >> n

A * (2^n)
乘法运算:相当于 A << n ,左移n位
除法运算:相当于A >> n , 右移n位

五、补码

1、计算机(CPU)只会做加法和位运算,所以引申出补码。

以A - B为例
解:
A - B = A + (100h - B) - 100h [h表示十六进制

B + ~B = ff
B + ~B + 1 = 100h
~B + 1 = 100h - B

代入
A - B = A + (~B + 1) -100h
定义求补运算为字长的表达范围减去A

求补:运算法则,类似加减乘除运算
补码:编码规则

将A编码为补码
最高位为符号表达位
a、当A > =0 时,最高位表达位为0,其余各位填写A的二进制值,不足的字长部分高位填0.
例:A = 110100
二进制 0 011 0100
16进制 3 4

正数:原码反码补码是一致相同的

b、当A < 0 时,最高位表达位为1,其余各位填写A求补的二进制值,不足的字长部分高位填1.
例:A = -30
二进制: - 11110
1001 1110
反码: 1110 0001
加一: + 1
补码: 1110 0010

负数就相当于补码

A - B = A + (-B)

六、字符串和字符区别
字符串:表示的是地址。(存储位置)
字符:表示的是数值(ASCII码表中的对应的序号)

七、编译和链接
编译:把高级语言转为机器语言
例如:
进入当前文件所在的路径> cl /c test.c
编译后,会生成一个obj格式的文件
链接:生成一个可执行文件
进入当前文件所在的路径>link test.obj
链接后,会生成一个以exe结尾(windows平台)的可执行文件

八、讲解简单C程序

include<stdio.h>

int main(void){
printf("Hello world!");
return 0;
}


a、预处理阶段:

include<stdio.h>和#include"stdio.h",效果是一样的。

因为stdio.h是IDE自带的,所以效果一样。
但当我们自做头文件的时候,我们要用双引号的方式。
<>是先找系统环境变量,再找当前目录下的环境变量
双引号是相反,先找当前目录下的环境变量,再找系统环境变量。

命令行: /P 可查看预处理

b、int main()
当执行完预处理后,要执行头文件里的有关main()函数定义后,才会执行main()

c、printf()函数

重定向输出
test.exe > test.txt
可以用记事本输出
test.exe > \127.0.0.1\f$\xxxxx\test.exe
---------
目录路径
可以通过网络输出

d、return
和main()一样,先执行头文件中有关return的定义,再执行return。

上一篇下一篇

猜你喜欢

热点阅读