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

4.1 KiB
Raw Blame History

计算机底层使用二进制来表示和处理数据。最基本的单位是 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 十进制转二进制

[root@tencentos ~]# bc
obase=2
ibase=10
10
1010

表示把十进制的 10 转换成二进制,结果是 1010

3.3 二进制转十进制

[root@tencentos ~]# bc
obase=10
ibase=2
1010
10

表示把二进制的 1010 转换成十进制,结果是 10

3.4 八进制转二进制

echo "obase=2;ibase=8;17" | bc
1111

八进制 17 转为二进制后是 1111

3.5 计算幂

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

[root@tencentos ~]# arch
x86_64

x86_64 表示当前机器架构是 64 位架构。

6.2 使用 uname -m

[root@tencentos ~]# uname -m
x86_64

这个命令也是查看机器架构时非常常用的方法。

6.3 使用 getconf LONG_BIT

[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、操作系统、应用程序三个层面
  • 查看系统位数时,archuname -mgetconf LONG_BIT 都很常用