进制的本质是什么:
由N个符号组成,逢N进1,(符号可以任意定义,可能会对解密者造成很大困扰!)
记住二进制与十六进制的映射
0000(0)
0001(1)
0010(2)
0011(3)
0100(4)
0101(5)
0110(6)
0111(7)
1000(8)
1001(9)
1010(A)
1011(B)
1100(C)
1101(D)
1110(E)
1111(F)
要学会查表:
可以很方便的进行加减乘除!
0-100个二进制数:
0,1,10,11,100,101,110,111,1000,1001
10011,1100,1101,1110,1111,......
其实书写二进制数的一个规律是这样的:遇到“满”是1,就不停的重复前面的"数",再加1
比如上面的这个例子:
0,1(现在位数全是1了,下面再加一个1,重复前面的数,即下面是10,11),
10,11(现在位数全是1了,下面再加一个1,重复前面的数,即下面是10,11)
数据宽度
数学上的数字,是没有大小限制的,可以无限大.但是在计算机中,由于受硬件的制约,数据都是有长度限制的(我们称之超过最多宽度的数据会被丢弃!)
在上面这幅图中
(小一点的"容器"):
- 如果是有符号的话,以中间垂直这条线为界限,这条线的右边是正数,左边是负数;-1对应F(圆形里面的F);-2对应E(圆形里面的E);...-8对应8(圆形里面的8);F对应最大的负数:即-1;8对应最小的负数:-8
- 如果是无符号的话,从0开始,到F,按照逆时针方向旋转,0~F
大一点的"容器"
逻辑与上面类似;
再大一点的"容器"
逻辑与上面类似;
再再大一点的"容器"
逻辑与上面类似;
无符号数:00000000-FFFFFFFF(32位)
常用的"容器"(其实是没有4位的,4位是2^4=16个数,对应第一个"圆")
BYTE 字节 8bit(2^8=256,对应第二个"圆")
WORD 双字节 16位
DWORD 四字节 32位
2个本质问题:
- 计算机什么也不认识,只存0和1
- 如果你存的数超过了它的界限,则毫不犹豫地扔掉
关于有符号与无符号,是使用的时候定义的,计算机表示很无辜;
逻辑运算
逻辑运算可以算是CPU运算的本质
CPU是如何计算2+3=?
想要获取某个值的第N位值是多少
比如:想要知道8F的第四位
1000FFFF
and 00001000
------------------------------------
00001000
运算完了之后看这位是什么原来的位就是什么!
最简单的加密算法:
如果将数放在CPU里面,运算速度是最快的,放在内存里面,存取速度相对慢一点.
上图中编号需要记忆好!
寄存器理解为"容器"!
操作码:"我要干什么"
操作数(源操作数,目标操作数):操作的对象
将高位省略了!