进制的思想本质
二进制?0 1
进制
1进制:一进一,结绳记事。1111
2进制:二进一,0 1
8进制:8个符号组成 0 1 2 3 4 5 6 7
量子计算机
量子计算机的单位:昆比特(量子比特)
光子:正交偏振方向
磁场:电子的自旋方向。
二进制: 0 1
0 1 10 11 100 101 110 111 1000 1001 1010 1011 1101 1110 1111
二进制这样写麻烦 16进制为简写
0123456789abcdef16进制:0123456789abcdef
汇编高级
了解程序的深层!
数据宽度
1byte = 8bit
C和C++ Java都需要定于数据的类型,计算机底层需要我们给这些数据定义宽度。
位 0 1
字节 0-0xFF
字 0-0xFFFF
双字(DWORD,全称Double Word,每个word为2个字节的长度,是指计算机中数值的位数(4字节,32位)。)
在计算机中,每一个数据都需要给它定义类型。给它定义宽度。
有符号数和无符号数
数据都是有宽度的。每个数据代表什么?
0 1 0 1 0 1 0 1
规则,二进制解码增加一个规则。
无符号数规则
1 0 0 1 1 0 1 0 0x9A
有符号数规则
最高位是符号位:1(负数)0(正数)
01如何转换?
原码反码补码
编码规则
有符号数的编码规则
原码:最高位符号位,对齐它的位进行本身绝对值。
反码:
- 正数:反码和原码相同
- 负数:符号位一定是1,其余位对原码取反。
补码:
-
正数:反码和原码相同
-
负数:符号位一定是1,反码+1。
# eg为8位
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
寄存器:内存 数值
mov(指令) 寄存器(eax) 数值
位运算
2*8最高效计算方式
与(and):两个为1 结果为1
1011
1101
-------------------------and
1001
或(or)运算:只要有一个为1 结果为1
异或(xor^)运算:不相同为1
1011 0001
1101 1000
------------ 异或运算
0110 1001
非运算:0就是1,1就是0.
位运算(移动位,左移乘二,右移除2)
0000 0001 1
0000 0010 2
0000 0100 4
0000 1000 8
左移:(shl <<)
0000 0001 所有的二进制位全部左移若干位,高位丢弃,低位补0
0000 0010
右移:(shr >>)
0000 0001 所有的二进制位全部右移若干位,低位丢弃,高位根据符号位决定
0000 0000
位运算的加减乘除
计算机只认识0和1
基本数学是建立在加减乘除上
4+5?
0000 0100
0000 0101
---------加法
0000 1001
# 计算机的实现原理
#第一步 异或,不考虑进位,异或可以直接出结果。
0000 0100
0000 0101
----------
0000 0001
#第二步 与运算,判断进位(如果与运算结果为0,没有进位)
0000 0100
0000 0101
----------
0000 0100
#第三步 将与运算的结果左移一位。
0000 1000
#第四步:异或
0000 0001
0000 1000
------------
0000 1001
#第五步 与运算(判断进位,如果与运算结果为0,没有进位)
0000 0001
0000 1000
-------------
0000 0000
#最终结果是与运算的结果的上一个异或运算
4-5?
4+(-5)
0000 0100
1111 1011 0000 0101 0变1 1变0 最后+1
-----------
1111 1111 ff=-1
#异或
0000 0100
1111 1011
---------
1111 1111
#与
0000 0100
1111 1011
---------
0000 0000
通用寄存器
在PC用的16位CPU 8086、8088中,寄存器的名字分别是AX(累加器),BX(基址寄存器),CX(计数寄存器),DX(数据寄存器),SP(堆栈指针),BP(基址指针),SI(源变址寄存器),DI(目的变址寄存器),IP(指令指针),等等……
寄存器:CPU>内存>硬盘
32位CPU 8 16 32
64位CPU 8 16 32 64
低八位高八位
内存
寄存器很小不够用,所以放到内存中
每个应用都有4G内存空间。
程序运行才从到物理内存
每个地址都有一个编号,可以通过编号往里面存值 指针–
如何存值?
数据宽度:byte word dword
地址的位置:0xFFFFFFFF
,等等……
寄存器:CPU>内存>硬盘
32位CPU 8 16 32
64位CPU 8 16 32 64
低八位高八位
内存
寄存器很小不够用,所以放到内存中
每个应用都有4G内存空间。
[外链图片转存中…(img-rHZdK97s-1629972510600)]
程序运行才从到物理内存
每个地址都有一个编号,可以通过编号往里面存值 指针–
如何存值?
数据宽度:byte word dword
地址的位置:0xFFFFFFFF