计算机底层教学
语言
![](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
对于二进制来说,直接修改值