【问题标题】:C - Fast conversion between binary and hex representationsC - 二进制和十六进制表示之间的快速转换
【发布时间】:2012-03-06 01:09:06
【问题描述】:

阅读或编写 C 代码时,我经常难以将数字从二进制转换为十六进制表示并返回。通常,像0xAAAA5555 这样的不同掩码在低级编程中经常使用,但是很难识别它们所代表的特殊位模式。有没有什么容易记住的规则,如何在头脑中快速做到这一点?

【问题讨论】:

  • 除了 0 和 F 很简单,你必须知道位。矿石使用 windows calc :)
  • 这些低级常量将非常依赖于上下文,因此唯一可能的方法是开发您对该上下文的体验。
  • 在便利贴上写下换算表,然后贴在显示器斜面上。 0=0000, 1=0001, 2=0010, 3=0011, 4=0100, ..., F=1111。当便利贴胶粘剂出现时,您可能已经记住了它们或转移到另一个项目。最常用于掩码的“数字”是具有单个位或一组相邻位的数字。一位:1、2、4、8;两位:3、6、C;三位:7,E;四:F。我仍然有时需要考虑的是位之间有间隙的那些:5、9、A、B、D。

标签: c math bit-manipulation representation


【解决方案1】:

每个十六进制数字映射正好在 4 位上,我通常记住每个位的 8421 权重,所以即使是在头脑中转换也很容易,即

A = 10 = 8+2 = 1010 ... 5 = 4+1 = 0101

请记住 8-4-2-1 权重。

A        5     
8+4+2+1  8+4+2+1
1 0 1 0  0 1 0 1

【讨论】:

    【解决方案2】:

    我总是发现将 HEX 映射到 BINARY 数字很容易。由于每个十六进制数都可以直接映射成一个四位二进制数,所以可以想到:

    > 0xA4 
    

    作为

    > b 1010 0100
    >   ---- ---- (4 binary digits for each part)
    >     A    4
    

    【讨论】:

    • 这很简单,但是反向映射呢?
    【解决方案3】:

    转换的计算方法是以 10 为基数的表示除以 2 并以相反的顺序将余数串起来。我在脑海中执行此操作,似乎可行。

    所以你说0xAAAA5555是什么样子的

    我只是通过做来计算出A的样子和5的样子

    A = 10
    
    10 / 2 = 5 r 0 
     5 / 2 = 2 r 1
     2 / 2 = 1 r 0
     1 / 2 = 0 r 1
    

    所以我知道 A 看起来像 1010(请注意,4 个手指是记住余数的好方法!)

    您可以将 4 位块串在一起,因此 AA 是 1010 1010。要将二进制转换回十六进制,我总是通过总结 2 的幂来再次通过基数 10。您可以通过形成 4 位块来做到这一点(用 0 填充)并将结果字符串化。

    所以1110111010001 1101 1101 这是(1) (1 + 4 + 8) (1 + 4 + 8) = 1 13 13 这是1DD

    【讨论】:

      猜你喜欢
      • 2019-01-27
      • 1970-01-01
      • 2014-10-30
      • 1970-01-01
      • 2010-10-23
      • 1970-01-01
      • 2012-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多