【问题标题】:What is the point of writing your code with hexadecimal notation for numbers?用数字的十六进制表示法编写代码有什么意义?
【发布时间】:2015-05-14 01:46:38
【问题描述】:

前几天我正在阅读一本关于编写更好代码的编程书。我到了描述如何获取任何二进制数并将其转换为十六进制表示法的部分。我对编程有点陌生,我想知道用十六进制表示法,甚至二进制文字格式写出你的数字,而不是使用普通的以 10 为基数或十进制系统有什么好处?是为了速度目的吗?如果是这样,即使它不是汇编代码,在 C++ 中使用十六进制系统仍然有优势吗?

【问题讨论】:

  • 当按位运算很重要时,通常使用它,因为两个十六进制数字可以表示一个字节的所有值。
  • 通常只是为了方便。例如,RGB 值可以用 0xRRGGBB 表示,即 0x235492,23 是红色,54 是绿色,92 是蓝色。你不能轻易解释十进制 2315410。
  • 哦,好的,我现在明白了。非常感谢

标签: c++ binary hex


【解决方案1】:

当使用直接位操作时,它通常更清晰,因为单个十六进制数字巧妙地映射到 4 位。很容易看出0x77 等于二进制中的0111 0111,但很难看到它们都等于119。所以如果你想用它来删除位置0 和4 中的位,无论出于何种原因,写0x77 & i119 & i 更容易看到发生了什么。

【讨论】:

    【解决方案2】:

    我发现位运算符的结果用十六进制或二进制写成比十进制更容易理解。

    255 & 15 = 15
    
    0xFF & 0x0F = 0x0F   // Much easier to follow
    

    【讨论】:

      【解决方案3】:

      我认为键入 2(以 10 为基数)与 0x02(以 16 为基数)对性能没有任何好处。两者都是常数。

      但是,我发现使用十六进制读取/使用执行按位运算(例如位掩码)的代码最方便。

      人为的例子

      #include <iostream>
      
      bool isBit2Set(int value)
      {
          static const int BIT_2_MASK = 0x02;
          return (value & BIT_2_MASK) != 0;
      }
      
      int main()
      {
          for (int i = 0; i < 9; ++i)
          {
              std::cout << i << " has bit 2 enabled? " << std::boolalpha << isBit2Set(i) << "\n";
          }
      
          return 0;
      }
      

      输出

      0 has bit 2 enabled? false
      1 has bit 2 enabled? false
      2 has bit 2 enabled? true
      3 has bit 2 enabled? true
      4 has bit 2 enabled? false
      5 has bit 2 enabled? false
      6 has bit 2 enabled? true
      7 has bit 2 enabled? true
      8 has bit 2 enabled? false
      

      【讨论】:

        猜你喜欢
        • 2019-01-04
        • 1970-01-01
        • 2014-05-18
        • 1970-01-01
        • 1970-01-01
        • 2015-04-01
        • 2013-06-10
        • 1970-01-01
        • 2014-03-18
        相关资源
        最近更新 更多