wiki/运维/Linux/笔记/1.操作系统进制及位数.md
2026-04-08 19:40:00 +08:00

158 lines
4.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

计算机底层使用二进制来表示和处理数据。最基本的单位是 bit8 个 bit 组成 1 个 Byte字节
## 1、常见数据单位
- bit二进制中的一位只能表示 0 或 1
- Byte字节1 Byte = 8 bit
- KB、MB、GB常见存储单位通常按 1024 进制换算
## 2、常见进制
计算机相关场景中,常见的进制有以下几种:
- 二进制:逢 2 进 1只包含 0 和 1
- 八进制:逢 8 进 1包含 0 到 7
- 十进制:逢 10 进 1包含 0 到 9
- 十六进制:逢 16 进 1包含 0 到 9 和 A 到 F
之所以经常提到二进制,是因为电路天然适合表示高低电平,而 0 和 1 正好对应这种状态。
## 3、进制转换
在 Linux 中可以使用 `bc` 命令做进制转换和数学计算。
### 3.1 `bc` 中常用参数
- `ibase`:输入数字的进制
- `obase`:输出结果的进制
一般建议**先设置 `obase`,再设置 `ibase`**。
因为设置 `ibase` 之后,后面输入的数字会按照新的输入进制解释,如果顺序写反,容易得到错误结果。
### 3.2 十进制转二进制
```shell
[root@tencentos ~]# bc
obase=2
ibase=10
10
1010
```
表示把十进制的 `10` 转换成二进制,结果是 `1010`
### 3.3 二进制转十进制
```shell
[root@tencentos ~]# bc
obase=10
ibase=2
1010
10
```
表示把二进制的 `1010` 转换成十进制,结果是 `10`
### 3.4 八进制转二进制
```shell
echo "obase=2;ibase=8;17" | bc
1111
```
八进制 `17` 转为二进制后是 `1111`
### 3.5 计算幂
```shell
echo "2^10" | bc
1024
```
这个例子常用于理解存储单位和位数相关计算。
## 4、什么是 32 位和 64 位
平时说的 32 位、64 位,通常和以下几个概念有关:
- CPU 架构位宽
- 操作系统位数
- 应用程序位数
它们彼此相关,但**不是完全等价**的概念。
### 4.1 CPU 位宽
CPU 位宽通常表示 CPU 一次处理数据的能力,以及它在地址计算上的能力范围。常见的是 32 位和 64 位。
### 4.2 操作系统位数
操作系统位数表示当前安装的系统是 32 位还是 64 位。一般来说:
- 64 位 CPU 可以安装 32 位或 64 位操作系统
- 32 位 CPU 通常只能安装 32 位操作系统
### 4.3 应用程序位数
在 64 位操作系统上,很多情况下可以运行 32 位应用程序;但在 32 位操作系统上,通常不能运行 64 位应用程序。
## 5、32 位和 64 位的主要区别
### 5.1 数据处理能力
64 位系统一次可以处理更宽的数据,在大数据计算、图形处理、科学计算等场景下通常更有优势。
### 5.2 内存寻址能力
32 位系统理论上最多可寻址 \(2^{32}\) 个地址,也就是约 4 GB 内存空间。
64 位系统的理论寻址范围远大于 32 位系统,能够支持更大的内存空间。不过实际可用内存还会受到硬件、内核和操作系统版本的限制。
### 5.3 软件兼容性
- 64 位操作系统通常兼容很多 32 位程序
- 32 位操作系统一般不能运行 64 位程序
## 6、如何查看系统位数
### 6.1 使用 `arch`
```shell
[root@tencentos ~]# arch
x86_64
```
`x86_64` 表示当前机器架构是 64 位架构。
### 6.2 使用 `uname -m`
```shell
[root@tencentos ~]# uname -m
x86_64
```
这个命令也是查看机器架构时非常常用的方法。
### 6.3 使用 `getconf LONG_BIT`
```shell
[root@tencentos ~]# getconf LONG_BIT
64
```
这个命令更直观,可以直接看到当前用户空间是 32 位还是 64 位。
## 7、常见误区
- `arch` 显示 `x86_64`,更准确地说是**机器架构为 64 位**,不一定能单独代表所有应用程序都是 64 位
- 64 位系统不一定“绝对更快”,性能还和 CPU、内存、程序本身的实现有关
- 32 位系统理论可寻址 4 GB但实际可用内存通常会更少
## 8、小结
- 计算机底层使用二进制处理数据
- `bit` 是最小单位,`1 Byte = 8 bit`
- `bc` 可以完成常见进制转换和数学计算
- 32 位和 64 位需要区分 CPU、操作系统、应用程序三个层面
- 查看系统位数时,`arch``uname -m``getconf LONG_BIT` 都很常用