4.1 KiB
4.1 KiB
计算机底层使用二进制来表示和处理数据。最基本的单位是 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 十进制转二进制
[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 bitbc可以完成常见进制转换和数学计算- 32 位和 64 位需要区分 CPU、操作系统、应用程序三个层面
- 查看系统位数时,
arch、uname -m、getconf LONG_BIT都很常用