二进制、十六进制、十进制的相互转换

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补齐。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值