根据教程视频,以下均以32位计算机为例
一.数据宽度
4位→可表示1位16进制0至F,以此类推。
8位→2位16,00至FF
16位→4位16,0000至FFFF
32位→8位16,00000000至FFFFFFFF
人为定义有/无符号
0 1 2 3 4 5 6 7 8 9 A B C D E F
每个数怎么表示是可以定义来的,如顺序定义为0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15或补码定义0 1 2 3 4 5 6 7 -8 -7 -6 -5 -4 -3 -2 -1此处不做详解
”1开头为负数“的理解则代表后半部分能表示的数以一开头,而刚好此部分全被定义为负数。
简单了解计量单位
| 英文 | 中文 | 换算关系 |
|---|---|---|
| BIT | 位 | 基础构成单元,一般以二进制呈现,为0或1 |
| BYTE | 字节 | 1字节=8位 |
| WORD | 字 | 此情况下1字通常为16位,即为2字节 |
| DWORD | 双字 | 1字*2,通常为4字节 |
二.逻辑运算
| 英文 | 中文 | 符号 | 用途 |
|---|---|---|---|
| OR | 或 | “ | “ |
| AND | 与 | & | 置0/进位 |
| XOR | 异或 | ^ | 位加法,实质2的模运算,加密 |
| NOT | 非 | ! | 翻转 |
以4位为例
1.计算2+3
容器:
X:0010(2)
Y:0011(3)
对每位:
0010
^ 0011
0001R:0001
进位:
0010
& 0011
0010同时0010<<1==0100(左移1位)
此时0100!=0000,所以继续运算
R→X:0001
Y:0100
对每位:
0001
^ 0100
0101R:0101
进位:
0001
& 0100
0000同时0000<<1==0000(左移1位),此操作后仍为0则计算完毕,此时R的0101即为结果
所以2+3=5(0101)
2.计算2-3
同理,X:0010
Y:0011→(进行补码运算,模16)1101
对每位:
0010
^ 1101
1111R:1111
进位:
0010
& 1101
0000同时0000<<1==0000(左移1位),此操作后进位计算完毕
所以2-3=-1(1111为补码表示,对应原码-1)
3.如何获取某value的第N位?
利用&操作置0:
10001111
& 00001000
00001000
4.利用xor加密
明:2015
key:54
加密过程:
00100000(取20的8位明文为例)
^01010100(key)
01110100(密文)
解密过程:
01110100(key)
^01010100(密文)
00100000(明文)
汇编语言
mov
1 | //将2赋值给eax寄存器 |