计算机系统基础

计算机系统基础

视频地址:https://www.bilibili.com/video/BV1ni4y1G7B9/

1、有符号数、无符号数

计算机是不懂正负的

假设整数在计算机中是占8位(实际上根据类型所占的位数是不同的,int是4字节32位)

无符号数在计算机中存储时,2进制表示是什么,这个数就是什么

0 0 0 0 0 0 0 1			# 十进制:1

有符号数在计算机中存储时,会把最高位当作符号位,1负0正

0 0 0 0 1 0 0 1		# 正数,最高位是0
1 0 0 0 1 0 0 1		# 负数,最高位是1

2、原码、反码、补码

原码反码补码实际上就是计算机的编码规则

原码:最高位是符号位,其余位置的2进制和就是该数的绝对值

# 1
0 0 0 0 0 0 0 1		# 最高位0代表是正数,其余7位的2进制和是1的绝对值
# -1
1 0 0 0 0 0 0 1		# 最高位1代表是负数,其余7位的2进制和是-1的绝对值

反码:

  • 正数的反码与原码相同
  • 负数的反码,最高位是符号位1,其余位对原码取反
# 1
0 0 0 0 0 0 0 1
# -1
1 1 1 1 1 1 1 0		# 最高位1代表是负数,其余7位对原码取反(0->1,1->0)

补码:

  • 正数的补码和原码相同
  • 负数的补码,最高位是符号位1,其余位是反码+1
# 1
0 0 0 0 0 0 0 1
# -1
1 1 1 1 1 1 1 1		# 最高位1代表是负数,其余7位变为反码+1

这样的一套编码规则是经过深思熟虑的,目的就是为了位运算!

3、位运算

与运算(and,&)

# 都为1则1,其余为0
1 0 0 0 1 1 1 1
0 1 1 1 0 0 0 1
---------------
0 0 0 0 0 0 0 1

或运算(or,|)

# 都为0则0,其余为1
1 0 0 0 1 1 1 1
0 1 1 0 1 0 0 0
---------------
1 1 1 0 1 1 1 1

异或运算(xor,^)

# 相同为0,不同为1
1 0 1 1 0 0 0 1
1 1 0 1 1 0 0 0
---------------
0 1 1 0 1 0 0 1

非运算(not,~)

# 取反(0->1,1->0)
1 0 1 1 0 0 0 1
---------------
0 1 0 0 1 1 1 0

左移(shl,<<)

# 实际上是*2
0000 0001  	# 所有二进制位全部左移若干位,高位就丢弃了,低位补0
0000 0010

右移(shr,>>)

# 实际上是/2
0000 0010  	# 所有二进制位全部右移若干位,低位就丢弃了,高位就需要补0,1(符号位决定。)
0000 0001

1000 0010	# -2的原码
1111 1101	# -2的反码
1111 1110	# -2的补码

1111 1110	# -2
1111 1111	# -1

负数在计算机中就是以补码的形式存在的!

原因是为了实现同一套运算规则!

4、位运算实现加减乘除

计算机是不懂加减乘除的

那么我们在高级语言中写的4+5,计算机是怎么算出来结果为9的呢?

4+5=?

0000 0100	# 4
0000 0101	# 5
---------	# (计算机是不懂加法的)
0000 1001	# 9

计算机中加法的实现原理!

# 第一步,异或!
0000 0100
0000 0101
---------	
0000 0001	
# (由于计算机是2进制计算的,而异或相同为0,不同为1恰好满足了0+0=0,1+1=10),如果不考虑进位,异或运算就是最后的结果!

# 第二步,与运算(判断进位,如果与运算结果为0,那么上一步异或的结果就是最后的结果)
0000 0100
0000 0101
---------
0000 0100
# 结果不为0说明有进位

# 第三步,将与运算的结果左移1位
0000 1000

# 第四步,异或!
0000 0001
0000 1000
---------
0000 1001

# 第五步,与运算
0000 0001
0000 1000
---------
0000 0000	# 结果为0,上一个异或的结果就是最终答案!

0000 1001	0x09	9

4-5=?

减法实际上就是特殊的加法!

# 第一步,异或!
0000 0100
1111 1011
---------
1111 1111

# 第二步,与运算
0000 0100
1111 1011
---------
0000 0000	# 结果为0,说明上一个异或的结果就是最终答案!

1111 1111	0xFF 	-1

乘:x*y, 就是 y 个 x 相加,还是加法 。

除:x/y, 本质就是减法,就是X 能减去多少个Y。

5、寄存器

现在的电脑几乎都是64位的,64位与32位相比寻址能力有了极大的提升,但底层架构并没有非常大的改动,因此依然可以学习32位

32位电脑有8个通用寄存器,可存的范围为0~FFFFFFFF

32168位
EAX 	AX		 AL	AH
EBX 	BX		 BL	BH
ECX 	CX		 CL	CH
EDX 	DX		 DL	DH
ESP 	SP 
EBP 	BP 
ESI 	SI 
EDI 	DI 
# EAX
0000 0000 0000 0000 0000 0000 0000 0000
# AX
0000 0000 0000 0000
# AL
L是low的意思,是AX中的低8位
H是High的意思,是AX中的高8位
# 向寄存器存值
mov eax,1
mov ebx,eax

除通用寄存器外,电脑中还有一些有特殊用法的寄存器

6、内存

寄存器的数量是比较少的,不够用,数据放到内存!

如果学习了操作系统会对内存有更清晰的了解,程序在运行时并不是所有数据都在内存的,是当前正在访问的那部分数据在内存,如果要访问不在内存的部分,处理器会根据调度算法将需要的部分放入内存。

理解32位的电脑内存最多4GB?

1B = 8bit

1KB = 1024B

1MB = 1024KB

1GB = 1024MB

4G的内存,最后换算成位是一个很大的数字!

4*1024*1024*1024*8 = 34359738368

计算机的每一块内存地址都是有编号的,32位电脑的内存地址编号最大也是32位!

实际上寄存器中有一个叫做寻址寄存器,32位,而每一个内存地址对应一个字节的数据,也就是8位

2^32*8 = 2^35 = 34359738368

所以1台32位的电脑,即使内存扩到了8G,由于4G之后的内存地址无法编址,也就无法访问和使用,所以说32位的电脑内存最多4G。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值