二进制与十六进制之间的转换

1 位十六进制数对应 4 位 二进制数。

记住三个基准数

记住下面的三个基准数的十六进制表示及对应的二进制表示,对这两种进制数之前的快速转换很有帮助。

  • A: 1010
  • C: 1100
  • F: 1111

B 可以通过 A+1得到,即为 1011; D 可以通过 C+1 得到,即为 1101, E 可以通过F-1得到, 即为 1110。

记住这三个基准数后,可以进行快速的转换,例如:

  • 0x39A7F8 --> 0011 1001 1010 0111 1111 1000
  • 1100 1001 0111 1011 --> 0xC97B
  • 0xD5E4C --> 1101 0101 1110 0100 1100
  • 10 0110 1110 0111 1011 0101 --> 0x26E7B5

当值为 2n 时的转换

当 x = 2n 时,x 的二进制表示为 1 后面跟 n 个 0,
当 x 用十六进制表示时,4 个二进制 0 对应一个十六进制 0,
将 n 变换成: n = i + 4j( 1 <= i <= 3 ),那么 x 用十六进制表示时,对应的首位数字是 2i;后面跟j个0。

因此,可以进行如下变换:

x = 29 = 512 = 21+4*2 = 0x200
x = 219 = 524288 = 23+4*4 = 0x80000
16384 = 214 = 22+4*3 = 0x4000
0x10000 = 20+4*4 = 216 = 65536
217 =21+4*4 = 0x20000 = 131072
32 = 25 = 21+4*1 = 0x20
0x80 = 23+4*1 = 27 = 128

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是汇编语言实现二进制十六进制转换的示例代码: ``` section .data bin db 10101010b ; 二进制数 hex db 0x2A ; 十六进制数 section .text global _start _start: ; 二进制十六进制 mov al, bin ; 将二进制数存入 al 寄存器 mov bl, 16 ; 将 16 存入 bl 寄存器 div bl ; al 寄存器的值除以 bl 寄存器的值,商存入 ah 寄存器,余数存入 al 寄存器 cmp al, 9 ; 判断余数是否小于等于 9 jbe bin_to_hex ; 如果小于等于 9,跳转到 bin_to_hex 标签 add al, 7 ; 如果大于 9,将余数加上 7,得到 A~F 的 ASCII 码 bin_to_hex: add al, 30h ; 将余数转换为 ASCII 码 mov [hex], al ; 将 ASCII 码存入 hex 变量中 ; 十六进制二进制 mov al, [hex] ; 将十六进制数存入 al 寄存器 sub al, 30h ; 将 ASCII 码转换为数字 cmp al, 9 ; 判断数字是否小于等于 9 jbe hex_to_bin ; 如果小于等于 9,跳转到 hex_to_bin 标签 sub al, 7 ; 如果大于 9,将数字减去 7,得到 A~F 的值 hex_to_bin: mov bl, 2 ; 将 2 存入 bl 寄存器 mov cl, 0 ; 将 0 存入 cl 寄存器 mov dl, al ; 将数字存入 dl 寄存器 mov al, 0 ; 将 al 寄存器清零 hex_to_bin_loop: shr dl, 1 ; 将 dl 寄存器右移一位,相当于除以 2 adc al, 0 ; 将进位标志位加到 al 寄存器中 inc cl ; 将 cl 寄存器加一 cmp cl, 8 ; 判断是否已经转换了 8 位二进制数 jne hex_to_bin_loop ; 如果没有,跳转到 hex_to_bin_loop 标签 mov [bin], al ; 将二进制数存入 bin 变量中 ; 退出程序 mov eax, 1 ; 将系统调用号 1(退出程序)存入 eax 寄存器 xor ebx, ebx ; 将返回值 0 存入 ebx 寄存器 int 0x80 ; 调用系统中断 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值