为什么我们有时使用十六进制格式而不是十进制?

时间:2014-09-03 03:45:45

标签: java variables hex

我已阅读有关

的解释
int a = 0x1; //hexadecimal format

但是,我仍然无法找到程序员应该使用0x1,0x2而不是普通整数1或2 ...

的原因

有人可以解释一下吗?

谢谢。

3 个答案:

答案 0 :(得分:4)

我自己使用的一个原因是,当涉及到旗帜时,它有组织/视觉上的帮助(即,当人们在代码中进行布局时)。

即。

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

等等。然后,这些可以更整齐地按位或“按”。

例如,以上所有的按位OR一起都是0X1F,二进制是11111,或者是单独的二进制字段。

然后,如果我想删除一个标志,我按位 - XOR 就可以了。

0x1F XOR 0x8 = 10111

答案 1 :(得分:4)

有许多理由更喜欢十六进制表示而不是十进制表示。计算中最常见的是bit fields。一些人已经提到了颜色代码,例如:

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

请注意,这种颜色表示不仅比试图找出像213545这样的随机整数的颜色更直观,而且比表示{(125, 255, 0)的3元组占用的空间更少。 1}}。十六进制表示是一种简单的方法来抽象出与3元组相同的想法,并且开销更少。

请记住,位字段有很多应用程序,请考虑(R,G,B)位字段:

spacetime

有人可能使用十六进制值的另一个原因是因为它有时更容易记住(和表示)二进制数字作为两个符号而不是三个。考虑x86 Instruction Reference。我清楚地知道 Represents x coordinate | Represents y coordinate | | Represents z coordinate | | | Represents t | | | | 1A 2B 3C 4D 0xC3;我发现更容易记住十六进制数ret而不是小数00-FF(我查了一下,0-255最终成为ret),但您的里程可能会有所不同。例如,这是我正在处理的一些代码from a project

195

在此处使用十六进制表示法时,有明显的好处(更不用说一致性)了。最后,正如Obicere所提到的,十六进制代码通常用作错误代码。有时它们会以类似字段的方式分组。例如:

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 // ... 下添加新错误。这个答案最终比我预期的要长很多,但希望我能说清楚。

答案 2 :(得分:2)

实际上没有区别。我认为它基于一致性考虑。例如,您想要指定一些颜色,如0xffffff,0xab32,0x13和0x1,这些颜色一致且易于阅读。