1.前言
该内容参考CSAPP
一个字节由8位组成。在二进制表示法中,它的值域是00000000~11111111,如果看成十进制整数,它的值域是0~255。两种符号表示法对于描述位模式来说都不是非常方便。二进制表示法太冗长,十进制表示法与位模式的相互转化很麻烦。替代的方法是,用十六进制数,来表示位模式。
编写机器级程序的一个常见任务就是在位模式的十进制、二进制和十六进制表示之间人工转换。
2.辗转相除法
辗转相处法可以用来求两个数的最大公约数,其实它也可以用于进制转换。
将一个十进制数字x转换为十六进制,可以反复用16除x,得到一个商q和余数r。然后我们用十六进制数字表示的r作为最低位数字,并且通过对q反复进行这个过程得到剩下的数字,直到q为0。
例子:十进制数37778122
37778122=16*2361132+10,即A
2361132=16*147570+12,即C
147570=16*9223+2,即2
9223=16*576+7,即7
576=16*36,即0
36=16*2+4,即4 (到了这一步要注意不要想当然)
2=16*0+2,即2
即0x24072CA
对于十进制数转二进制数方法类似,下面可以用来口算数字1~9对应的二进制数
3.二进制与十六进制的相互转换
窍门:记住十六进制数字A、C和F相应的十进制值,而对于把十六进制值B、D和E转换成十进制值,则可以通过计算它们与前三个值的相对关系来完成。
十六进制转换成二进制:
展开每个十六进制数字,将它转换为二进制格式:
十六进制 A B C D E F
二进制 1010 1011 1100 1101 1110 1111
例子:0x173A4C
1->0001 7->0111 3->0011 4->0100
即0001 0111 0011 1010 0100 1100
二进制转换成十六进制:
位总数是4的倍数,则把数字每4位一组转换为16进制。如果位总数不是4的倍数,最左边的一组可以少于4位,前面用0补齐。