许多语言(至少C可以追溯到.
0x或以0X16 进制(十六进制)数字作为前缀0前缀为 8 进制(八进制)数字我了解十六进制和十进制的用法。它们随处可见,具有不同的用例,使代码更具可读性(按位andwith0x20000比 with 更清晰131072),并且不能混淆(带有 'x' 或 'X' init 的数字不会使感觉为十进制数)。
然而,八进制文字对我来说似乎是一个错误。首先,我从未见过它们被使用,并且似乎无法想到一个单一的用例,可以使代码在十六进制或十进制上使用它们更具可读性。此外,它们可能会与十进制数(010编程语言域之外的完全合法的十进制数)混淆。
那么,八进制文字有用途吗?它们是某种形式的历史遗留包袱,它们曾经有用过,还是只是一个错误?
我想到的一个用例是文件权限,例如:
int retval = mkdir("/tmp/example", 0755);
Run Code Online (Sandbox Code Playgroud)
请参阅http://linux.die.net/man/2/mkdir
Unix 中的文件权限以三组三位表示:
755代表用户:读、写、执行;组:读取、执行;其他:读取、执行。
巧合的是,基数 8 的数字可以用三位来表示:
0 --> 000
1 --> 001
2 --> 010
3 --> 011
4 --> 100
5 --> 101
6 --> 110
7 --> 111
Run Code Online (Sandbox Code Playgroud)
所以八进制是一种非常方便的文件权限表示法。
如果使用基数 10 来指定模式,0755 实际上会变成 493,这不会清楚地映射到给定模式,就像十六进制 0x1ED 一样。
这里,在基数 8 中,每个数字恰好是一组三位。