八进制:0-7组成
例子:
八卦
指令在机器中以机器码格式输出,机器码一次原始输出位数是八的倍数,即以字节长度为最小单位输出。
十六进制:0-9,abcde...组成,0X开头
十六进制可以更紧凑地表示二进制,让人们不用直接面对冗长的01机器码
汇编里计算 96÷4。
用 div 指令是这样:
mov ax, 60h
mov cl, 4h
div ax, cl
执行后 al=0x18 表示商,ah=0x0 表示余数。
但是我看应该不会有人愿意这么做。因为 div 指令要求被除数必须放在 ax 中,不能放在别的地方。如果要执行这个除法运算的不是 ax,而是别的寄存器,或者一个内存单元,就必须先把它的值送到 ax 中,然后才能用上面的指令去运算。更要命的是,如果这个时候 ax 中还有别的有用的数据,那就更麻烦了,还得先 push 临时储存,算完以后再 pop 回来。
所以机智的做法应该是下面这样:
mov ax, 60h
shr ax, 1h
shr ax, 1h
这里的 ax 可以换成 bx 等别的寄存器。shr 是逻辑右移,每执行一次相当于除以 2。
96 写成二进制是 01100000,右移一位得到 0110000,也就是十六进制的 0x30,十进制是 48。
再右移一位,变成 011000,十六进制是 0x18,十进制是 24。
如果右移四位,得到的则是 0110,等于 0x6,刚好相当于除以 16。
那么如果改成 96÷32,就要执行五次“shr ax, 1h”。为了避免这个麻烦,可以写成下面这样:
mov ax, 60h
mov cl, 5h
shr ax, cl
对于除数为 2、4、8、16……的除法运算,用 shr 指令比用 div 指令快得多,也方便得多。
在编程中 and、or、not、xor、shl、shr 等是一类非常有用的运算,它们都是为二进制而生的,而引入十六进制的目的之一就是为了便于阅读二进制,因此相对于十进制来说,十六进制拥有无法取代的优势。当然并不是说一定不能用十进制去表示,理论上确实是可行的,只是由于会带来太多麻烦,人们不愿意这样做罢了。
因此,谁要是喜欢在计算机界里搞十进制,谁才是真正的反人类。
二进制原理:
一字节=八个比特位
1byte=8bit
1kb=1024b
1m=1024k
1g=1024m
1t=1024G
八进制转十进制: