十六进制数互相转换

十六进制数互相转换 

二进制和十六进制的互相转换比较重要。不过这二者的转换却不用计算,每个C,C++程序员都能做到看见二进制数,直接就能转换为十六进制数,反之亦然。

我们也一样,只要学完这一小节,就能做到。

首先我们来看一个二进制数:1111,它是多少呢?

你可能还要这样计算:1 * 20 + 1 * 21 + 1 * 2+ 1 * 23 = 1 * 1 + 1 * 2 + 1 * 4 + 1 * 8 = 15。

然而,由于1111才4位,所以我们必须直接记住它每一位的权值,并且是从高位往低位记,:8、4、2、1。

即,最高位的权值为2= 8,然后依次是 22 = 4,21=2, 20 = 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(可能你还不熟悉A~F这五个数),然后15如何用8421凑呢?应该是8 + 4 + 2 + 1,所以四位全为1 :1111。

接着转换 D:

看到D,知道它是13,13如何用8421凑呢?应该是:8 + 2 + 1,即:1011。

所以,FD转换为二进制数,为: 1111 1011

 

由于十六进制转换成二进制相当直接,所以,我们需要将一个十进制数转换成2进制数时,也可以先转换成16进制,然后再转换成2进制。

比如,十进制数 1234转换成二制数,如果要一直除以2,直接得到2进制数,需要计算较多次数。

所以我们可以先除以16,得到16进制数:

被除数计算过程余数
12341234/16772
7777/16413 (D)
44/1604

 

结果16进制为: 0x4D2

 

然后我们可直接写出0x4D2的二进制形式: 0100 1011 0010。

其中对映关系为:

0100 -- 4

1011 -- D

0010 -- 2

 

同样,如果一个二进制数很长,我们需要将它转换成10进制数时,除了前面学过的方法是,我们还可以先将这个二进制转换成16进制,然后再转换为10进制。

下面举例一个int类型的二进制数:

01101101 11100101 10101111 00011011

我们按四位一组转换为16进制: 6D E5 AF 1B   

 

转摘自: http://www.cnblogs.com/yezhenhan/archive/2011/10/26/2225096.html

<think>我们正在讨论十进制与十六进制互相转换方法。根据用户需求,需要详细说明转换方法。 参考引用内容:引用[1]提到十六进制二进制是每1位十六进制对应4位二进制,然后按权相加;引用[2]介绍了二进制转十进制的方法(按权展开求);引用[3]给出十六进制转十进制的PL/SQL函示例;引用[4]指向十进制转二进制的百度百科。 用户的问题:十进制与十六进制互相转换的方法。 我们将分为两个部分: 第一部分:十进制转十六进制(上次已回答55转十六进制为37,这次需要一般方法) 第二部分:十六进制转十进制 注意:在转换过程中,我们需要处理0-9A-F(a-f)的对应关系。 第一部分:十进制转十六进制(除16取余法) 步骤: 1. 将十进制除以16,得到商。 2. 余对应十六进制字(0-9直接对应,10-15分别对应A-F)。 3. 用商继续除以16,重复上述步骤,直到商为0。 4. 将每次得到的余从最后一个开始逆序排列,得到十六进制。 第二部分:十六进制转十进制(按权展开求法) 步骤: 1. 将十六进制的每一位按权展开(基为16,从右到左,最右边为第0位)。 2. 将每一位的字乘以16的相应次幂(位置序号从0开始,从右向左递增)。 3. 将每一位的乘积相加,得到十进制。 注意:十六进制中的A-F分别对应10-15。 举例说明: 例1:十进制55转十六进制(上次已举,这次再简略提一下,然后举另一个例子) 例2:十六进制'2F'转十进制。 根据系统指令,学表达式要用$...$$$...$$格式。 另外,按照要求生成相关问题。 </think>以下是十进制与十六进制互相转换的详细方法说明,结合两种常用转换算法实际示例: ### 一、十进制 → 十六进制(除16取余法) **步骤原理**: 连续用16除十进制,取余并逆序排列,余10-15需转为A-F字母。 计算过程: $$商_n = \left\lfloor \frac{被除}{16} \right\rfloor, \quad 余_n = 被除 \mod 16$$ **示例:255转十六进制** 1. $255 ÷ 16 = 15$(商)余 $\color{red}{15}$ → **F** 2. $15 ÷ 16 = 0$(商)余 $\color{red}{15}$ → **F** 3. 逆序排列余:**FF** $$验证:15×16^1 + 15×16^0 = 240 + 15 = 255$$ **字母对应表** | 余 | 10 | 11 | 12 | 13 | 14 | 15 | |------|----|----|----|----|----|----| | 字母 | A | B | C | D | E | F | --- ### 二、十六进制 → 十进制(按权展开法) **步骤原理**: 将十六进制各位按权展开求(最右侧为$16^0$) 计算公式: $$ d_n \times 16^n + d_{n-1} \times 16^{n-1} + \cdots + d_0 \times 16^0 $$ **示例:1A3转十进制** $$ \begin{align*} \text{1A3} &= 1×16^2 + A×16^1 + 3×16^0 \\ &= 1×256 + 10×16 + 3×1 \\ &= 256 + 160 + 3 \\ &= 419 \end{align*} $$ *注:A需转为十进制10* **字母转换规则** | 字母 | A | B | C | D | E | F | |------|---|---|---|---|---|---| | 值 | 10| 11| 12| 13| 14| 15| --- ### 三、转换工具实现参考(Python) ```python # 十进制转十六进制 def dec_to_hex(n): hex_chars = "0123456789ABCDEF" result = "" while n > 0: result = hex_chars[n % 16] + result # 取余对应字符 n //= 16 return result or "0" # 十六进制转十进制 def hex_to_dec(s): s = s.upper() hex_map = {c: i for i, c in enumerate("0123456789ABCDEF")} result = 0 for i, char in enumerate(reversed(s)): # 从右向左处理 result += hex_map[char] * (16 ** i) return result print(dec_to_hex(255)) # 输出 FF print(hex_to_dec("1A3")) # 输出 419 ``` --- ### 关键说明 1. **补零规则**:十六进制若首位是字母(如FF),直接书写无需补零[^1] 2. **大小写处理**:转换时通常不区分大小写(A与a均视为10)[^3] 3. **边界值**:十进制0在十六进制中仍为0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值