计算机底层使用二进制来表示和处理数据。最基本的单位是 bit(位),8 个 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` 都很常用