十六进制转换方法
学习各进制之间的转换,我们先了解些基本概念:
数码:表示数的符号。
基:数码的个数
权:每位所具有的的值
数制
十进制
二进制
八进制
十六进制
数码
0~9
0~1
0~7
0~15
10
2
8
16
100101102
202122
808182
160161162
特点
逢十今一
逢二进一
逢八进一
逢十六进一
1、 各进制如何转换为十进制
例:十六进制2AF5转换为十进制,由左至右乘十六进制权值后相加。
5*16^0+15*16^1+10*16^2+2*16^3=5+240+2560+8192=10997
  八进制76转换为十进制,同理。
6*8^0+7*8^1=6+56=62
  二进制转换成1101转换成十进制
1*2^0+0*2^1+1*2^2+1*2^3=13
终上所述各进制转换为十进制的方法为,由左至右乘各进制权值后相加。
2、 十进制转换成各进制
例:十进制6转换为二进制,10进制数转换成二进制数,这是一个连续除2的过程:把要转换的数,除以2,得到商和余数,将商继续除以2,直到商为0。最后将所有余数倒序排列,得到数就是转换结果。要转换的数是6 6 ÷ 2,得到商是3,余数是0
“将商继续除以2,直到商为0……”现在商是3,还不是0,所以继续除以2
那就: 3 ÷ 2, 得到商是1,余数是1。“将商继续除以2,直到商为0……”
现在商是1,还不是0,所以继续除以2。那就: 1 ÷ 2, 得到商是0,余数是1
“将商继续除以2,直到商为0……最后将所有余数倒序排列”
我们三次计算依次得到余数分别是:011,将所有余数倒序排列,那就是:110了!
6转换成二进制,结果是110
例十进制数120转换成八进制数。
被除数
计算过程
余数
120
120/8
15
0
15
15/8
1
7
1
1/8
0
1
120转换为8进制,结果为:170
10进制数转换成16进制的方法
同样是120,转换成16进制则为:
被除数
计算过程
余数
120
120/16
7
8
7
7/16
0
7
120转换为16进制,结果为:78
综上所述,十进制和各进制之间的转换是除以各进制的基,直到除到0,取倒数。
3,二进制和十六进制的互相转换
二进制数:1111,它是多少呢?
你可能还要这样计算:1 * 2^0 + 1 * 2^1 + 1 * 2^2 + 1 * 2^3 = 1 * 1 + 1 * 2 + 1 * 4 + 1 * 8 = 15
然而,由于11114位,所以我们必须直接记住它每一位的权值,并且是从高位往低位记,:8421。即,最高位的权值为2^3 8,然后依次是 2^2 42^12 2^0 1
记住8421,对于任意一个4位的二进制数,我们都可以很快算出它对应的10进制值。
下面列出四位二进制数 xxxx 所有可能的值(中间略过部分)
4位的2进制数 快速计算方法  十进制值    十六进值
1111        = 8 + 4 + 2 + 1 = 15          F
1110        = 8 + 4 + 2 + 0 = 14          E
1101        = 8 + 4 + 0 + 1 = 13          D       
1100        = 8 + 4 + 0 + 0 = 12          C       
1011        = 8 + 4 + 0 + 1 = 11          B       
1010        = 8 + 0 + 2 + 0 = 10          A
1001        = 8 + 0 + 0 + 1 = 10          9
.
0001        = 0 + 0 + 0 + 1 = 1          1
0000        = 0 + 0 + 0 + 0 = 0          0
二进制数要转换为十六进制,就是以4位一段,分别转换为十六进制。
(上行为二制数,下面为对应的十六进制)
1111 1101 1010 0101 1001 1011
F    D  A    5  9    B
反过来,当我们看到 FD时,如何迅速将它转换为二进制数呢?
先转换F:看到F,我们需知道它是15(可能你还不熟悉AF这五个数),然后15如何用8421凑呢?应该是8 + 4 + 2 + 1,所以四位全为1 1111。接着转换 D:看到D,知道它是1313如何用8421凑呢?应该是:8 + 2 + 1,即:1011。所以,FD转换为二进制数,为: 1111 1011由于十六进制转换成二进制相当直接,所以,我们需要将一个十进制数转换成2进制数时,也可以先转换成16进制,然后再转换成2进制。比如,十进制数 1234转换成二制数,如果要一直除以2,直接得到2进制数,需要计算较多次数。所以我们可以先除以16,得到16进制数:
被除数
计算过程
余数
1234
1234/16
77
2
77
77/16
4
13 (D)
4
4/16
0
4
结果16二进制转换十六进制数进制为: 4D2然后我们可直接写出4D2的二进制形式: 0100 1011 0010
同样,如果一个二进制数很长,我们需要将它转换成10进制数时,除了前面学过的方法是,我们还可以先将这个二进制转换成16进制,然后再转换为10进制。
01101101 11100101 10101111 00011011
我们按四位一组转换为16进制: 6D E5 AF 1B 
4、原码、反码、补码
我们已经知道计算机中,所有数据最终都是使用二进制数表达。
我们也已经学会如何将一个10进制数如何转换为二进制数。
不过,我们仍然没有学习一个负数如何用二进制表达。
比如,假设有一 int 类型的数,值为5,那么,我们知道它在计算机中表示为:
00000000 00000000 00000000 00000101
5转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。现在想知
道,-5在计算机中如何表示?
在计算机中,负数以其正值的补码形式表达。
什么叫补码呢?这得从原码,反码说起。
原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。
比如 00000000 00000000 00000000 00000101 5 原码。
反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。取反操作指:原为1,得0;原为0,得1。(10; 01
比如:将00000000 00000000 00000000 00000101每一位取反,得11111111 11111111 11111111 11111010
称:11111111 11111111 11111111 11111010 00000000 00000000 00000000 00000101 的反码。反码是相互的,所以也可称:
11111111 11111111 11111111 11111010 00000000 00000000 00000000 00000101 互为反码。
补码:反码加1称为补码。
也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。
比如:00000000 00000000 00000000 00000101 的反码是:11111111 11111111 11111111 11111010
那么,补码为:
11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011
所以,-5 在计算机中表达为:11111111 11111111 11111111 11111011。转换为十六进制:0xFFFFFFFB
再举一例,我们来看整数-1在计算机中如何表示。
假设这也是一个int类型,那么:
1、先取1的原码:00000000 00000000 00000000 00000001
2、得反码:    11111111 11111111 11111111 11111110
3、得补码:    11111111 11111111 11111111 11111111
可见,-1在计算机里用二进制表达就是全116进制为:0xFFFFFF
一切都是纸上说的……说-1在计算机里表达为0xFFFFFF,我能不能亲眼看一看呢?当然可以。利用C++ Builder的调试功能,我们可以看到每个变量的16进制值。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。