进制转换
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 我们熟悉的10进制 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
计算机使用的2进制 0 1 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111
我们可以转换为任何进制,比如3进制 0 1 2 10 11 12 20 21 22 100 101 102 110 111 112 120 121 122 200 201 202 210 211 212 220 221 222
|
十进制(日常使用)
二进制(计算机使用)
数据宽度(C、C++、Java对数据类型的定义)
最高位符号位(正数0,负数1)
原码:除符号位外取绝对值
反码:负数取反
补码:负数的反码+1
1 2 3 4 5
| 数字-5 原码:1000 0101 反码:1111 1010 补码:1111 1011 最后计算机存储是就是补码结果。
|
位运算
&与(同1为1)
|或 (有1为1)
!非,取反
异或xor (相反为1)
异或运算结构图:
https://www.bilibili.com/video/BV1EW411u7th?p=3
移动位
左移(<<shl):所有二进制全部左移若干位,高位丢弃,低位补0
右移(>>shr):所有二进制全部右移若干位,低位丢弃,高位补0或1(符号位决定)
计算机实现原理
(重复下面两种运算)
1:异或运算
2:与运算
例如:4+5的运算应该如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| 4的二进制是:0000 0100 5的二进制是:0000 0101 ----------------------- 1:异或运算 0000 0100 0000 0101 --------- 0000 0001
2:与运算 0000 0100 0000 0101 --------- 0000 0100 3:有进位就进位 0000 0100 ---------- 0000 1000 4:异或运算 0000 0001 0000 1000 --------- 0000 1001 5:与运算 0000 0001 0000 1000 --------- 0000 0000 因为步骤5结果为0,灯全灭,所以结果是步骤4:0000 1001
|
同理,减法是加法的逆运算,比如4-5就是4+(-5)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 4的二进制是: 0000 0100 -5的二进制是:1111 1011 ----------------------- 1:异或运算 0000 0100 1111 1011 --------- 1111 1111 2:与运算 0000 0100 1111 1011 --------- 0000 0000 因为步骤2结果为0,灯全灭,沙滩椅结果是步骤1:1111 1111
|
汇编语言
汇编指令(如mov)
寄存器
内存
堆栈
存储数据:CPU>内存>硬盘
1 2 3 4 5 6 7 8 9
| 32位 16位 8位 EAX AX AL ECX CX CL EDX DX DL EBX BX BL 低8位 ESP SP AH EBP BP CH ESI SI DH EDI DI BH 高8位
|
mov指令
mov 寄存器地址,值
mov 寄存器地址1,寄存器地址2
内存
1B=8bit 1字节等于8位
内存地址编号,值
寻址能力 32位=4GB
FFFF FFFF +1=1 0000 0000
1 0000 0000 *8 = 8 0000 0000
转换为10进制是:
343 5973 8368 位 = 4GB
mov指令
mov 数据宽度 [内存地址]/寄存器,值
内存地址支持位运算