跳转到内容

Advertising:

八进制

来自GSXAB的知识库
八进制
术语名称 八进制
英语名称 octal numeral system
别名 base-8 numeral system
八进制的
术语名称 八进制的
英语名称 octal
别名 base-8, oct
八进制数
术语名称 八进制数
英语名称 octal number

八进制(octal, base-8, 缩写为 oct)记数系统指基数为 8 的进位制记数法。是指通过 0~7 八个符号表达数值的满八进一的记数方法。

由于八进制可以作为二进制的缩写,计算机科学有时会使用八进制表达二进制数据。

定义

基数为 8 的进位制记数法称为八进制记数法(octal numeral system, base-8 numeral system, 简称 octal, base-8)。

八进制记数法下的数称为八进制数(octal number)。

类似地,“八进制系统相关的”往往使用八进制的(octal, 常缩写为 oct, 或 base-8)作为前缀。

表示

八进制中的每一位只含有 [math]\displaystyle{ 0,1,2,\cdots,7 }[/math] 八个符号。在写成数形式时,遵从进位制记数法的一般规则,由权重更高的位到权重更低的位写成一串,且存在小数部分时在位权为 [math]\displaystyle{ 8^0=1 }[/math] 的位后添加小数点。

若需要指出具体进制时,可使用一般的添加进制下标的形式,即 [math]\displaystyle{ 357_8 }[/math][math]\displaystyle{ (357)_8 }[/math] 。也有人使用缩写下标或后缀,即 [math]\displaystyle{ 357_\mathrm{oct} }[/math][math]\displaystyle{ 357\mathrm{o} }[/math]

编程语言,特别是 C 风格语言中,八进制数通常加前缀 00o0O ,即 0357 。在 C 语言本身只有前一种,考虑到和其他进制前缀的对称,以及在普通十进制数字前误加 0 会改变进制这点有些违背直觉和数学习惯,继承使用这个系列前缀的现代语言通常会引入 0o0O 作为八进制更推荐的前缀。在 BASIC 风格语言中,八进制数通常加前缀 &O ,即 &O357

使用

在现代计算机相关领域,八进制有时用于表达一个字节数据,此时八位组会被分为 2 + 3 + 3 的三组表达为八进制形式。早期曾经有长为 6 、 12 、 24 、 36 等 3 的倍数的计算机系统,其中数据通过八进制紧凑表示,因此八进制位受到早期编程语言的特殊支持,而这种表示不断被新语言继承,因此广泛存在于编程语言中。只是由于后续存储长度多逐渐变为按照 8 个二进制位划分, 8 并不是 3 的倍数,十六进制紧凑表示成为主流,因此八进制表达内存的地位逐渐被十六进制取代。

数值及转换

转换工具

使用工具站中的进制转换器:点此使用进制转换器

位权

对八进制数,其小数点前的最低位,或直接称为最低位,位权为 1 ,向高位依次为 [math]\displaystyle{ 8,8^2,8^3,\cdots }[/math]

如果存在小数部分,则向低位也依次为 [math]\displaystyle{ 8^{-1},8^{-2},8^{-3},\cdots }[/math]

八进制转换为十进制

计算一个八进制数的十进制表示时,可以通过计算对应位权相加的方式,即 [math]\displaystyle{ a_n 8^n + a_{n-1} 8^{n-1} + \cdots + a_1 8^1 + a_0 }[/math] ,也可以通过秦九韶算法将其看作多项式求值 [math]\displaystyle{ ((\cdots(a_n x + a_{n-1}) x + \cdots + a_1) x + a_0) \mid_{x=8} }[/math]

十进制转换为八进制

短除法:不断对 8 做带余除法,将余数作为得到的位,商继续循环,直到 0 为止。余数从最低位依次到最高位排列。

二进制转换为八进制

因为 8 本身是 2 的幂,因此可以通过简单分组方式进行转换。将一个二进制数按照位权为 1 的数位对齐的方式划分成 3 个一组的形式,则新的形式就可以看成一个八进制数,且其中每一位数都进一步地通过 3 位二进制数表示。将这些二进制数表示对应地换成八进制中的符号,就得到了对应整个数的八进制表示。

八进制转换为二进制

以上过程的逆过程,将八进制数每一位上的符号替换为 3 位二进制数,就得到了一个被 3 位分隔的二进制数。

一些常见数值表示

对有限小数,不列出其对应的无限循环小数形式。

整数(十进制) 整数(八进制) 分数(十进制) 小数(八进制)
1 1 1/1 1
2 2 1/2 0.4
3 3 1/3 [math]\displaystyle{ 0.\overline{25} }[/math]
4 4 1/4 0.2
5 5 1/5 [math]\displaystyle{ 0.\overline{1463} }[/math]
6 6 1/6 [math]\displaystyle{ 0.1\overline{25} }[/math]
7 7 1/7 [math]\displaystyle{ 0.\overline{1} }[/math]
8 10 1/8 0.1
9 11 1/9 [math]\displaystyle{ 0.\overline{07} }[/math]
10 12 1/10 [math]\displaystyle{ 0.0\overline{6314} }[/math]
11 13 1/11 [math]\displaystyle{ 0.\overline{0564272135} }[/math]
12 14 1/12 [math]\displaystyle{ 0.0\overline{52} }[/math]
13 15 1/13 [math]\displaystyle{ 0.\overline{0473} }[/math]
14 16 1/14 [math]\displaystyle{ 0.0\overline{4} }[/math]
15 17 1/15 [math]\displaystyle{ 0.\overline{0421} }[/math]
16 20 1/16 0.04


记数系统
位值制
记数法
进位制记数法/标准位值制记数法(进制) 二进制八进制十进制十六进制、……
非标准
位值制
记数法
符号数字
进位制记数法
平衡进位制记数法
(平衡进制)
平衡三进制、……
双射进位制记数法
(双射进制)
双射十进制双射二十六进制、……
位权是幂
但基数不是自然数
(非自然数进制)
[math]\displaystyle{ -2 }[/math][math]\displaystyle{ -4 }[/math] 、……
[math]\displaystyle{ \sqrt{2} }[/math][math]\displaystyle{ \sqrt{3} }[/math][math]\displaystyle{ \sqrt[12]{2} }[/math] 、……
[math]\displaystyle{ 2i }[/math][math]\displaystyle{ \sqrt[4]{2}i }[/math][math]\displaystyle{ 2\omega }[/math][math]\displaystyle{ \sqrt[3]{2}\omega }[/math][math]\displaystyle{ -1\pm i }[/math] 、……
位权不是幂 存在基数
混合进制
二五混合进制阶乘进制、……
广义位值制记数法 [math]\displaystyle{ p }[/math]-进数
质数记数法、……
符值制记数法 (双射)一进制罗马记数法希腊记数法、……

Advertising: