计算机组成原理
二进制:0,1,10,11,100,101,110,111,
十进制:0,1, 2, 3 , 4 ,5 , 6 , 7
十六进制:0, 1 ,2 ,3 , 4 ,5 , 6 ,7 ,8, 9,a, b, c, d, e, f
一.二进制转16进制要用到十进制中介:记住:十进制: 8 4 2 1对应二进制:1000,100,10,1
二进制转十六进制:
二进制:10001010::::::
十六进制:(从右到左二进制每四个组成一组):1000 1010 :ox开头 是十六进制的象征(如:1111 这个二进制 在 十六进制中是 F)
二.原码,反码,补码
编码规则:
原码:最高位是符号位,对齐它的位进行本身绝对值即可
反码:1.正数:反码和原码相同
2.负数:符号位一定是1,其余位对原码取反
补码:
1.正数:补码和原码相同
2.负数:符号位一定是1,且对反码加1;
三.位运算(实际上就是电路板,晶体管,计算机的底层原理)
2*8的最高效运算:?左移:
1.与运算(and,&):(电路开关,1和1得1,0和0得0,1和0得0)
1011 0001
1101 1000
这两个进行&运算:
1001 0000
2.或运算 :|(只要有一个1,就为1)
1011 0001
1101 1000
这两个|的结果是:
1111 1001
3.异或运算(^) (相同即为0,不相同则为1)
1011 0001
1101 1000
0110 1001
4.非运算(单目运算符 not )
1101 1000
5.取反运算:(原码和反码)
0010 0111
通过这些位运算就可以实现加减乘除
位置运算:(计算机操作位置的左移右移就可以实现数字的倍增和倍减):就是右移乘2.左移除2;
0000 0001 :1
0000 0010 :2
0000 0100 :4
0000 1000 :8
左移:<< :高位丢弃,低位补0
右移 >> :低位丢弃,高位补0或者1(根据符号位,负数补1,正数补0)
32位处理器:一个字就代表4个字节;64位处理器:一个字代表8个字节;
int a= 10
printf("%d\N" a>>2),查看内存地址
6.位运算的加减乘除
举个列子:十进制中的3+5=8
0000 0011
0000 0101
8就是:0000 1000
计算机内部如何计算:将0000 0011异或,将0000 0101进行与运算(判断进位,如果与运算结果为0,则没有发生进位)
再将两者的结果,左移一位。最后一步,再次将最新的结果进行异或。 实现数学上数字的加法:这是计算机底层的运算步骤。。。。。。
7.通用寄存器
32位通用寄存器只有8个,存值的范围是:0 ~ FFFFFFFF
计算机如何向寄存器存值:对于二进制来说,直接修改值,但是要找到内存地址
或者通过汇编语言: mov 存的地址 ,存的数
mov 地址1 , 地址2;一个寄存器的里值写到另一个寄存器
8.内存
寄存器很小,不够用,所以说,数据放在内存!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)