十六进制表示法(二进制/十六进制/十进制之间的转换)

十六进制表示法(二进制/十六进制/十进制之间的转换)本文详细介绍了十六进制 二进制之间的转换规则 如何在 C 语言中表示 并通过实例演示了如何将十六进制转换为二进制和反之

大家好,欢迎来到IT知识分享网。

参考资料:《深入理解计算机系统》原书第三版

现代计算机存储和处理信息以二值形式表示,二进制数字也称位。一个字节由8位组成。二进制表示法中,它的值域为0000000022;如果看做十进制数就是010到25510

十六进制表示法

1

由于二进制太过冗长,十进制与位表示法转化太过麻烦,因此,用十六进制数来表示位模式较为方便。十六进制(简写成hex)使用0到9,以及A到F来表示16个可能的值。在十六进制表示法中,它的值域为0016到FF16

十六进制数字 0 1 2 3 4 5 6 7
十进制值 0 1 2 3 4 5 6 7
二进制值 0000 0001 0010 0011 0100 0101 0110 0111
十六进制数字 8 9 A B C D E F
十进制值 8 9 10 11 12 13 14 15
二进制值 1000 1001 1010 1011 1100 1101 1110 1111

在C语言中,以0x开头或以0X开头的数字常量被认为是十六进制的值。字符‘A’~‘F’可以是大写,也可以是小写,或者是大小写混合。在编写机器级程序的一个常见任务就是在位模式的十进制、二进制、十六进制之间的人工转换。一个简单窍门是记住十六进制数字A、C和F相应的十进制值,而对于把十六进制值B、D和E转化成十进制值,则可以通过计算它们与前三个值得相对关系来完成。

比如,假设给你一个数字0x173A4C。可以通过展开每个十六进制数字,将它转换为二进制格式,如下所示:

十六进制 1 7 3 A 4 C
二进制 0001 0111 0011 1010 0100 1100

反过来,如果给定一个二进制数字,可以通过首先把它分为每4位一组(从后往前)来转换为十六进制。不过要注意,如果位总数不是4得倍数,最左边得一组可以少于4位,前面用0补足。然后将每4位组转换为相应的十六进制数字:

二进制 11 1100 1010 1101 1011 0011
十六进制 3 C A D B 3

练习题1 完成下面的数字转换:
A.将0x39A7F8转换为二进制。
B.将二进制11011转换为十六进制。
C.将0xD5E4C转换为二进制
D.将二进制转换为十六进制。

2

当值x是2的非负整数n次幂时,也就是x=2n,我们很容易将x写成十六进制的形式。具体来讲,当n表示成i+4j的形式,其中0≤i≤3,我们可以把x写成开头的十六进制数字为1(i=0)、2(i=1)、4(i=2)或者8(i=3),后面跟随着j个十六进制的0。比如,x=2048=211,我们有n=11=3+4×2,从而得到十六进制表示0x800。

练习题2 填写下表中的空白项,给出2的不同次幂的十进制和十六进制表示:

n 2n(十进制) 2n(十六进制)
9 512 0x200
19
16384
0x10000
17
32
0x80

3 十进制和十六进制之间的转换

十进制和十六进制表示之间的转换需要使用乘法或者除法来处理一般情况。将一个十进制数x转换成十六进制,可以反复地用16除x,得到一个商q和一个余数r,也就是x=q·16+r。然后,我们用十六进制数字表示的r作为最低位的数字,并且通过对q反复进行这个过程得到剩下的数字。例如,考虑十进制的转换:

 = 19634·16+12 (C) 19634 = 1227·16+2 (2) 1227 = 76·16+11 (B) 76 = 4·16+2 (C) 4 = 0·16+4 (4) 

从这里,我们能读出十六进制表示为0x4CB2C。

反过来,将一个十六进制数字转换成十进制数字,我们可以用相应的16的幂乘以每个十六进制数字。比如,给定数字0x7AF,我们计算它对应的十进制值为
7·162+10·16+15
= 7·256+10·16+15
= 1792+160+15
=1967

练习题3 一个字节可以用两个十六进制数字来表示。填写下表中缺失的项,给出不同字节模式的十进制、二进制和十六进制的值:

十进制 二进制 十六进制
0 0000 0000 0x00
167
62
188
0011 0111
1000 1000
1111 0011
0x52
0xAC
0xE7
旁注:十进制和十六进制之间的转换 较大数值的十进制和十六进制之间的转换,最好是让计算机或者计算器来完成。 

练习题4 不讲数字转换为十进制或者二进制,试着解答下面的算术题,答案要用十六进制表示。提示:只要将执行十进制加减法所使用的方法改成以16为基数。(逢10进1变为逢16进1)(二进制同样的道理:逢2进1)
A. 0x503c + 0x8 = ___________
B. 0x503c – 0x40 = ___________
C. 0x503c + 64 = ___________
D. 0x50ea – 0x503c = __________

练习题答案

练习题1

十六进制 3 9 A 7 F 8 二进制 0011 1001 1010 0111 1111 1000 

B. 将二进制11011转换成十六进制:

二进制 1100 1001 0111 1011 十六进制 C 9 7 B 

C. 将0xD5E4C转换成二进制:

十六进制 D 5 E 4 C 二进制 1101 0101 1110 0100 1100 

D. 将二进制转换成十六进制:

二进制 10 0110 1110 0111 1011 0101 十六进制 2 6 E 7 B 5 

练习题2
这个问题给你一个机会思考2的幂和它们的十六进制表示。

n 2n(十进制) 2n(十六进制)
9 512 0x200
19 524 288 x
14 16 384 0x4000
16 65 536 0x10000
17 131 072 0x20000
5 32 0x20
7 128 0x80

练习题3
这个问题给你一个机会试着对一些小的数在十六进制和十进制表示之间进行转换。对于较大的数,使用计算器或者转换程序会更加方便和可靠。

十进制 二进制 十六进制
0 0000 0000 0x00
167=10·16+7 1010 0111 0xA7
62=3·16+14 0011 1110 0X3E
188=11·16+12 1011 1100 0XBC
3·16+7=55 0011 0111 0X37
8·16+8=136 1000 1000 0X88
15·16+3=243 1111 0011 0XF3
5·16+2=82 0101 0010 0x52
10·16+12=172 1010 1100 0xAC
14·16+7=231 1110 0111 0xE7

练习题4
当开始调试机器级程序时,你将发现在许多情况中,一些简单的十六进制运算是很有用的。可以总是把数转换成十进制,完成运算,再把它们转换回来,但是能够直接用十六进制工作更加有效,而且能够提供更多的信息。

A. 0x503c+0x8=0x5044。8加上十六进制c得到4并且进位1。 B. 0x503c-0x40=0x4ffc。在第二个位数,3减去4要从第三位借1。因为第三位是0,所以我们必须从第四位借位。 C. 0x503c+64=0x507c。十进制64(2的6次方)等于十六进制0x40。 D. 0x50ea-0x503c=0xae。十六进制数a(十进制数10)减去十六进制数c(十进制数12),我们从第二位借16, 得到十六进制数e(十进制数14)。在第二个数位,我们现在用十六进制d(十进制13)减去3,得到十六进制a(十进制10)。 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/153951.html

(0)
上一篇 2025-02-28 21:25
下一篇 2025-02-28 21:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信