有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (3) 个答案

  1. # 1 楼答案

    其实没什么区别。我认为这是基于一致性的考虑。例如,您希望指定一些颜色,例如0xffffff、0xab32、0x13和0x1,这些颜色是一致的且易于阅读

  2. # 2 楼答案

    我使用我自己的一个原因是,当涉及到标志时,它有助于组织/视觉(即,在代码中对人类进行布局时)

    int a = 0x1;
    int b = 0x2;
    int c = 0x4;
    int d = 0x8;
    int e = 0x10;
    

    等等。然后,可以将它们按位或更整齐地组合在一起

    例如,上面所有按位或“ed”的toegether都是0X1F,即二进制中的11111,或单独的二进制字段

    然后,如果我想删除一个标志,我就按位-XOR将其删除

    0x1FXOR0x8=10111

  3. # 3 楼答案

    与十进制表示法相比,人们更喜欢十六进制表示法的原因有很多。计算中最常见的是bit fields。一些人已经提到了颜色代码,例如:

    red   = 0xFF0000 // 16711680 in decimal
    green = 0x00FF00 // 65280 in decimal
    blue  = 0x0000FF // 255 in decimal
    

    请注意,这种颜色表示法不仅比试图找出213545这样的随机整数可能是什么颜色更直观,而且比表示(R,G,B)的三元组(125, 255, 0)占用的空间更少。十六进制表示法是一种简单的方法,可以以更少的开销抽象出与三元组相同的概念

    记住比特字段有很多应用程序,考虑^ {< CD3>}位字段:

      Represents x coordinate
      |  Represents y coordinate
      |  |  Represents z coordinate
      |  |  |  Represents t
      |  |  |  |
      1A 2B 3C 4D
    

    人们可能使用十六进制值的另一个原因是,有时更容易记住(并将)二进制数字表示为两个符号,而不是三个符号。考虑x86 Instruction Reference。我从心底里知道0xC3ret;我发现记忆十六进制数00-FF比记忆小数0-255更容易(我查了一下,结果ret195),但你的里程可能会有所不同。例如,这是我一直在研究的一些代码from a project

    public class x64OpcodeMapping {
        public static final Object[][] map = new Object[][] {
                { "ret",   0xC3 },
                { "iret",  0xCF },
                { "iretd", 0xCF },
                { "iretq", 0xCF },
                { "nop"  , 0x90 },
                { "inc"  , 0xFF },
        };
    }
    

    在这里使用十六进制表示法有明显的好处(更不用说一致性)。最后,正如奥比切尔所提到的,十六进制代码经常被用作错误代码。有时它们以一种类似于场的方式分组。例如:

    0x0X = fatal errors
    0x1X = user errors
    0x2X = transaction errors
    // ...
    // X is a wildcard
    

    在这种模式下,最小错误列表如下所示:

    0x00 = reserved
    0x01 = hash mismatch
    0x02 = broken pipe
    0x10 = user not found
    0x11 = user password invalid
    0x20 = payment method invalid
    // ...
    

    注意,如果需要,这也允许我们在0x0X下添加新的错误。这个答案最终比我预期的要长得多,但希望我能有所启发