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

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

作者: 鲁卡Mr | 来源:发表于2018-10-16 22:39 被阅读0次

    一、计算机组成

    输入、输出、运算、控制、存储
    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。

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/vbjkzftx.html