在计算机中，除了二进制，比较常用的还有八进制和十六进制。

## 二进制

二进制是计算机内部运算中采用的进制，在这样的进制系统下，只有 $0,1$ 两个数字，计算机内部的所有运算（包括位运算）都是在二进制的基础上进行的。

但用二进制表示数字会让数字过长，因此为了方便表示的需要，通常会把二进制数转换为八进制或十六进制表示。

## 八进制

在八进制下，有 $0,1,2,3,4,5,6,7$ 八个数字。

一般情况下，八进制数以 `oxx`（其中 `o` 为八进制的前缀，`xx` 代表八进制数）的形式来表示。

## 十六进制

在十六进制下，有 $0,1,2,3,4,5,6,7,8,9,A(10),B(11),C(12),D(13),E(14),F(15)$ 十六个数字。

十六进制与二进制相比，最大的优点就是表示的数字长度较短，一位十六进制数可以表示 4 位二进制数。

一般情况下，十六进制数以 `0xdbf`（其中 `0x` 为十六进制数的前缀）的形式来表示。

## 进制间的相互转化

### 十进制转二进制 / 八进制 / 十六进制

这里以二进制为例来演示，其他进制的原理与其类似。

整数部分，把十进制数不断执行除 2 操作，直至商数为 0。读余数从下读到上，即是二进制的整数部分数字。 小数部分，则用其乘 2，取其整数部分的结果，再用计算后的小数部分依此重复计算，算到小数部分全为 0 为止，之后从上到下，读所有计算后整数部分的数字，即为二进制的小数部分数字。

```text
将33.25转化为二进制数
整数部分：
33/2=16	......1
16/2=8	......0
8/2=4	......0
4/2=2	......0
2/2=1	......0
1/2=0	......1
小数部分：
0.25*2=0.5	0
0.5*2=1		1
```

即 $33.25 = (100001.01)_2$

### 二进制 / 八进制 / 十六进制转十进制

还是以二进制为例。

二进制数转换为十进制数，只需将每个位的值，乘以 $2^i$ 次即可，其中 $i$ 为当前位的位数，个位的位数为 0。

```text
将11010.01(2)转换为十进制数
11010(2)=1*2^4+1*2^3+0*2^2+1*2^1+0*2^0+0*2^(-1)+1*2(-2)
        =26.25
```

即 $(11010)_2 = (26.25)_{10}$

### 二进制 / 八进制 / 十六进制间的相互转换

一个八进制位可以用 3 个二进制位来表示（因为 $2^3 =8$ ）, 一个十六进制位可以用 4 个二进制位来表示（ $2^4 = 16$ ），反之同理。
