Day02

发布时间 2024-01-09 17:12:04作者: Fleaf152

计算机底层教学

语言

![](C:\Users\26329\Pictures\Screenshots\屏幕截图 2024-01-08 154140.png)

进制

学习进制的障碍

人类天然地选择10进制

进制的运算

运算的本质是查数

每种进制都有对应的运算体系

二进制

十六进制就是二进制的简写

数据

在计算机中,每一个数据都需要给他定义类型。 给它定义宽度,在内存中的宽度

有符号数和无符号数

数据都是有宽度的。

无符号数规则

你这数字是什么 那就是什么

有符号数规则

最高位是符号位: 1负0正

原码反码补码

编码规则

有符号数的编码规则

原码:最高位符号位,对其它的位进行本身绝对值即可

反码

  • 正数:反码和原码相同

  • 负数:符号位一定是1, 其他位对原码取反

补码:

  • 正数:补码和原码相同
  • 负数:符号位一定是1,其他位对反码 +1
1
#原码 0 0 0 0 0 0 0 1
#反码 0 0 0 0 0 0 0 1
#补码 0 0 0 0 0 0 0 1
-1
#原码 1 0 0 0 0 0 0 1
#反码 1 1 1 1 1 1 1 0
#补码 1 1 1 1 1 1 1 1
-7
#原码 1 0 0 0 0 1 1 1
#反码 1 1 1 1 1 0 0 0
#补码 1 1 1 1 1 0 0 1
3+5
0 1 2  3  4   5   6   7
0 1 10 11 100 101 110 111

如果看到一个二进制的数字,需要了解它是有符号数还是无符号数

负数在计算机中是以补码的方式来存储的

位运算

与运算(and &)

![](C:\Users\26329\Pictures\Screenshots\屏幕截图 2024-01-08 204147.png)

或运算(or | )

![](C:\Users\26329\Pictures\Screenshots\屏幕截图 2024-01-08 204719.png)

异或运算(^)

![](C:\Users\26329\Pictures\Screenshots\屏幕截图 2024-01-08 205028.png)

非运算(单目运算符)

1101 1000
-----------xor
0010 0111

通过这几个运算方式可以完成加减乘除 位运算来实现加减乘除

位运算(移动位 )

左移(<<)

所有二进制位向左移动若干位,高位丢弃,低位补0

右移(>>)

所有二进制位向右移动若干位,低位丢弃,高位根据符号位补0或1

位运算的加减乘除

计算机只能进行位运算 不直接实现加减乘除而是通过位运算进行加减乘除

#计算机的实现原理
#计算4 + 5
#第一步: 异或(不考虑进位)
0000 0100
0000 0101 
---------^
0000 0001

#第二步: 与(判断进位,若运算结果为0,则没有进位)
0000 0100
0000 0101 
---------&
0000 0100

#第三步: 将与运算的结果左移一位(进位)
 得到 0000 1000
 
 #第四步:将上一次异或的结果和与运算左移后的结果进行异或运算
 0000 0001
 0000 1000
 ---------^
 0000 1001
 
 #第五步,将结果进行与运算,若得到0,则上一步的结果为解;若不为0,重复此循环。

涉及到负数的运算,将负数的原码转换为补码进行以上操作。

汇编语言

通过汇编指令来代替二进制给计算机发送操作

![](C:\Users\26329\Pictures\Screenshots\屏幕截图 2024-01-09 164947.png)

寄存器

32位的通用寄存器只有8个 ![](C:\Users\26329\Pictures\Screenshots\屏幕截图 2024-01-09 165844.png)

存值的范围0-FFFFFFFF

对于二进制来说,直接修改值