c++ - 使用不必要的十六进制表示法?
问题描述
在阅读Apple 的 dlfcn.h 标头时,我可以跨越这些宏:
#define RTLD_LAZY 0x1
#define RTLD_NOW 0x2
#define RTLD_LOCAL 0x4
#define RTLD_GLOBAL 0x8
0x
当前缀可以安全地删除时,这个标题的作者是否有任何理由将这些写为十六进制数字?0x1
等0x2
与没有 的数字相同0x
。
这只是个人编码风格吗?
解决方案
对于 2 的幂序列,通常使用十六进制而不是十进制,因为它可以清晰地缩放。
当然,这里只有四个选项,但考虑一个可能的扩展:
0x01
0x02
0x04
0x08
0x10
0x20
0x40
0x80
// ...
虽然任何程序员都会立即熟悉以十进制表示的等效序列,但它并不那么清晰/对称:
1
2
4
8
16
32
64
128
// ...
因此,在这里使用十六进制成为惯例。
除此之外,当然,风格。有些人喜欢用十六进制表示“计算机使用的数字”,因为它看起来有点机器人;cf 十进制表示“人类使用的数字”。
还要考虑使用这些常量的值可能会使用按位运算符(在十六进制中同样方便)进行操作,并在以十六进制给出字节值的调试器中查看。如果源代码中的值使用与程序操作和工具相同的基础,则更容易交叉引用源代码中的值。在这种情况下,0x22 比 34 更容易理解。
最后,您可能会问为什么我们使用十六进制而不是十进制,因为两者之间总是存在有效的转换。事实是,在某些情况下,某些基地比其他基地更方便。你不会指望你的手指在二进制中,因为你有十个。
推荐阅读
- angular - 量角器 - Angular 与功能模块不同步
- javascript - 如何在我的功能组件中声明类型?
- python - jupyter notebook 在转换为 pdf 期间崩溃了乳胶
- python - 从 Reelgood.com 抓取 url 列表
- python - 我总是收到关于 call() 需要 2 个位置参数但给出了 3 个的错误,帮帮我
- amazon-web-services - 将 FSX 映射到 windows 实例;出错
- javascript - 可更改的个人资料图像 ReactJs
- javascript - 如何通过搜索词减少对象数组
- c# - 复制函数
- python - python,记录器,文件结构,全局配置