16进制转10进制
十六进制数第0位的权值是16的0次方,第1位的权值是16的1次方,第2位的权值是16的2次方,第3位的权值是16的3次方。
十六进制1000转换十进制时,首先1000按照位数来排列,分别为第0位的0,第1位的0,第2位的0,第3位的1。
在我们开始查看机器级程序的时候,理解十六进制和二进制格式之间的关系将是很重要的。A.将0x39A7F8转换成二进制:
现代计算机存储和处理信息以二值形式表示,二进制数字也称位。一个字节由8位组成。二进制表示法中,它的值域为000000002到111111112;如果看做十进制数就是010到25510。
十进制和十六进制表示之间的转换需要使用乘法或者除法来处理一般情况。将一个十进制数x转换成十六进制,可以反复地用16除x,得到一个商q和一个余数r,也就是x=q·16+r。然后,我们用十六进制数字表示的r作为最低位的数字,并且通过对q反复进行这个过程得到剩下的数字。例如,考虑十进制314156的转换:
十六进制转换计算器
比如,假设给你一个数字0x173A4C。可以通过展开每个十六进制数字,将它转换为二进制格式,如下所示:
练习题3这个问题给你一个机会试着对一些小的数在十六进制和十进制表示之间进行转换。对于较大的数,使用计算器或者转换程序会更加方便和可靠。
练习题4当开始调试机器级程序时,你将发现在许多情况中,一些简单的十六进制运算是很有用的。可以总是把数转换成十进制,完成运算,再把它们转换回来,但是能够直接用十六进制工作更加有效,而且能够提供更多的信息。
在C语言中,以0x开头或以0X开头的数字常量被认为是十六进制的值。字符‘A’~‘F’可以是大写,也可以是小写,或者是大小写混合。在编写机器级程序的一个常见任务就是在位模式的十进制、二进制、十六进制之间的人工转换。一个简单窍门是记住十六进制数字A、C和F相应的十进制值,而对于把十六进制值B、D和E转化成十进制值,则可以通过计算它们与前三个值得相对关系来完成。
当值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。
二进制编码器
十进制二进制十六进制0000000000x00167621880011011110001000111100110x520xAC0xE7旁注:十进制和十六进制之间的转换较大数值的十进制和十六进制之间的转换,最好是让计算机或者计算器来完成。
十六进制数字01234567十进制值01234567二进制值00000001001000110100010101100111十六进制数字89ABCDEF十进制值89101112131415二进制值10001001101010111100110111101111
练习题3一个字节可以用两个十六进制数字来表示。填写下表中缺失的项,给出不同字节模式的十进制、二进制和十六进制的值:
反过来,将一个十六进制数字转换成十进制数字,我们可以用相应的16的幂乘以每个十六进制数字。比如,给定数字0x7AF,我们计算它对应的十进制值为7·162+10·16+15=7·256+10·16+15=1792+160+15=1967
添加新评论