【问题标题】:Convert binary to hex to decimal将二进制转十六进制转十进制
【发布时间】:2012-04-08 19:44:45
【问题描述】:

我有二进制数 1010 1011。我知道这是十六进制的 AB,我知道十进制的 A = 10 和 B = 11。但是我如何从十进制的 10 和 11 得到最终数字 171?

使用十六进制我会这样做

             A            B
0xAB = (10 * 16^1) + (11 * 16^0) = 171

我可以对十进制数做类似的事情,从 10 和 11 到 171?基本上,我只是在寻找一种无需计算器即可快速转换任何二进制数的方法。

【问题讨论】:

  • 我用 C 来做这些事情。
  • 非常好,您有代码向我们展示您是如何进行转换的吗?
  • 1010 1011这个数字怎么存储?
  • @BradRem Ehm.. 我实际上并不是在寻找库或任何东西,我只是在学习二进制/十六进制和十进制,因为我是按位运算的新手,我正在尝试理解一切。

标签: c binary hex decimal


【解决方案1】:

我认为没有比 A × 16 + B 更简单的方法了。

【讨论】:

    【解决方案2】:

    根据您要执行的操作以及您使用的语言,您可以使用左移运算符并将值相加。

    在 C++ 中:

    unsigned short val_a = (0x1010 << 4);
    unsigned short val_b = 0x1011;
    unsigned short result = val_a + val_b;
    

    结果仍然是一个无符号短整数。

    【讨论】:

      【解决方案3】:

      在 C 中,如果乘法从 A 和 B 得到 AB,则可以转移:

      int number = A << 4 + B;
      

      如果将 A 存储为 1010(十进制),将 B 存储为 1011,则可以转换:

      int bin2dec(unsigned int s){ 
        int v, p;
        for (v = 0, p = 1; s > 0; s=s>>1) { v = v+p*(s%2); v++; p*=2;}
        return v;
      }
      
      int number = bin2dec(A) << 4 + bin2dec(B);
      

      【讨论】:

      • 精确按照您的步骤,我得到number = 2040; 或0x7f8。