使用不必要的十六进制表示法?
Using unnecessary hexadecimal notation?
在阅读 Apple's dlfcn.h header 时,我可以跨过这些宏:
#define RTLD_LAZY 0x1
#define RTLD_NOW 0x2
#define RTLD_LOCAL 0x4
#define RTLD_GLOBAL 0x8
当前缀 0x
可以安全删除时,此 header 的作者是否有任何理由将这些写成十六进制数? 0x1
、0x2
等与没有 0x
.
的数字相同
这只是个人编码风格吗?
对于 2 的幂序列,通常使用十六进制而不是十进制,因为它可以清晰地缩放。
当然,这里只有四个选项,但请考虑一个可能的扩展:
0x01
0x02
0x04
0x08
0x10
0x20
0x40
0x80
// ...
虽然任何程序员都会立即熟悉以十进制表示法呈现的等效序列,但它不像 legible/symmetrical:
1
2
4
8
16
32
64
128
// ...
所以,这里用十六进制就成了约定俗成。
除此之外,当然,风格。有些人喜欢用十六进制表示 "numbers used by the computer",因为它看起来有点像机器人; c.f。 "numbers used by humans".
的小数
还要考虑使用这些常量的值可能会使用按位运算符进行操作(这在十六进制中同样方便),并在以十六进制给出字节值的调试器中查看。如果源代码中的值与程序的操作和您的工具使用相同的基础,那么交叉引用这些值会更容易。在这种情况下,0x22 比 34 更容易理解。
最后,您可能会问为什么我们曾经 使用十六进制而不是十进制,因为两者之间始终存在有效的转换。事实上,某些基地只是在某些情况下比其他基地更方便。你不会用手指指望二进制,因为你有十个手指。
在阅读 Apple's dlfcn.h header 时,我可以跨过这些宏:
#define RTLD_LAZY 0x1
#define RTLD_NOW 0x2
#define RTLD_LOCAL 0x4
#define RTLD_GLOBAL 0x8
当前缀 0x
可以安全删除时,此 header 的作者是否有任何理由将这些写成十六进制数? 0x1
、0x2
等与没有 0x
.
这只是个人编码风格吗?
对于 2 的幂序列,通常使用十六进制而不是十进制,因为它可以清晰地缩放。
当然,这里只有四个选项,但请考虑一个可能的扩展:
0x01
0x02
0x04
0x08
0x10
0x20
0x40
0x80
// ...
虽然任何程序员都会立即熟悉以十进制表示法呈现的等效序列,但它不像 legible/symmetrical:
1
2
4
8
16
32
64
128
// ...
所以,这里用十六进制就成了约定俗成。
除此之外,当然,风格。有些人喜欢用十六进制表示 "numbers used by the computer",因为它看起来有点像机器人; c.f。 "numbers used by humans".
的小数还要考虑使用这些常量的值可能会使用按位运算符进行操作(这在十六进制中同样方便),并在以十六进制给出字节值的调试器中查看。如果源代码中的值与程序的操作和您的工具使用相同的基础,那么交叉引用这些值会更容易。在这种情况下,0x22 比 34 更容易理解。
最后,您可能会问为什么我们曾经 使用十六进制而不是十进制,因为两者之间始终存在有效的转换。事实上,某些基地只是在某些情况下比其他基地更方便。你不会用手指指望二进制,因为你有十个手指。