我已阅读有关
的解释int a = 0x1; //hexadecimal format
但是,我仍然无法找到程序员应该使用0x1,0x2而不是普通整数1或2 ...
的原因有人可以解释一下吗?
谢谢。
答案 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,这些颜色一致且易于阅读。