计算机基础 | 常见进制与单位简介 / 表示 / 描述

发布于:2025-04-19 ⋅ 阅读:(20) ⋅ 点赞:(0)

注:本文为 “进制与常见单位应用” 相关文章合辑

原文为繁体,注意术语描述差异。
略作重排。


进制简介(二进制、八进制、十进制、十六进制)

发表于 2017-01-20 郑中胜

数字系统(Numeral system),又称记数系统,是用来表示“数”的方式。常依以下方式分类:

  • 进位制:十进位、二进位、八进位、十六进位等
  • 写法:中文数字、阿拉伯数字、罗马数字等

简介

十进制(Decimal)

人类最常使用的数字系统是十进制(Decimal, Dec)。它以“10”作为进位基底(base),逢十进一,因此又称为 base-ten 或 base 10。

Decimal

六十进制(Sexagesimal)

六十进制(Sexagesimal)多用于表示时间、角度等,如“一小时为 60 分钟,一分钟为 60 秒”,又称为 base 60。

二进制(Binary)

在计算机硬件中,指令以一连串“高”与“低”的电子信号表示。当电压足够时,呈现“ON”;电压不足时,呈现“OFF”,也可用数字表示。即以 2 为基底的数,其中 0(关)表示负电荷(negative charge),1(开)表示正电荷(positive charge)。

计算机的资料以二进制数(Binary Digit)保存,称为位元(bit)。二进制的单个位数(digit)是计算机的最基本单位。二进制(Binary)是本文的重点,也称为 b a s e   2 base\ 2 base 2

让电脑硬件直接辨识、执行且符合指令格式(instruction format)的二进制指令集,称为机器语言(machine language)。

例如:

  • 十进制的 9487 9487 9487
  • 二进制表示为:“ 10010100001111 10010100001111 10010100001111”,
  • 最左边的位数称为最高有效位元(Most Significant Bit, MSB),
  • 最右边的位数称为最低有效位元(Least Significant Bit, LSB)。

MSB and LSB

八进制(Octal)与十六进制(Hexadecimal)

不幸的是,二进制(Binary)极难阅读。为了便于使用和沟通,需要找到更合适的进位制。几乎所有计算机的资料大小都是 4 位元的倍数,且相对于十进制,二进制与十六进制(Hexadecimal, Hex)或八进制(Octal, Oct)的转换更加直观方便。因此,Hex 和 Oct 被广泛应用。

例如:

  • 十进制中的“ 9487 9487 9487”这个数字,
  • 二进制需表示为:“ 10010100001111 10010100001111 10010100001111”,
  • 八进制为:“ 22417 22417 22417”,
  • 十六进制为:“ 250 F 250F 250F”。
八进制(Octal)

八进制(Oct), b a s e   8 base\ 8 base 8,不如十六进制(Hex)使用频繁,但在许多领域及场合仍会出现,由以下数字表示,逢八进制:

Octal

(ex: 0、1、2、3、4、5、6、7、10、11、12、13、14、15、16、17、20…)

十六进制(Hexadecimal)

十六进制(Hex), b a s e   16 base\ 16 base 16,是资讯领域用得最频繁的进制之一(例如:内存倾印 memory dump、HTML 或 CSS 的色码)。值得注意的是,其由以下数字及字母表示,逢十六进制:

Hexadecimal

(ex: 0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F、10、11、12、13、14、15、16、17、18、19、1A、1B、1C、1D、1E、1F、20…)(A~F 可为大小写)

务必注意:9 之后是“A”,而非“10”!

: HTML 为用于建立网页的标记语言,CSS 则为阶层式样式表。

表示法

如果每次都这样写,未免过于繁琐:

  • 十进制的:“ 9487 9487 9487”,
  • 二进制表示为:“ 10010100001111 10010100001111 10010100001111”,
  • 八进制:“ 22417 22417 22417”,
  • 十六进制:“ 250 F 250F 250F”。

用英文表示似乎也并无改善:

  • Decimal:“ 9487 9487 9487”,
  • Binary:“ 10010100001111 10010100001111 10010100001111”,
  • Octal:“ 22417 22417 22417”,
  • Hex:“ 250 F 250F 250F”。

下标法

为了方便书写,通常使用下标表示法,即在数字的右下角加上当前的进制。为更清晰,可先加上小括弧,再加下标。

例如:

948 7 10 = ( 10010100001111 ) 2 = ( 22417 ) 8 = ( 250 F ) 16 9487_{10} = (10010100001111)_2 = (22417)_8 = (250F)_{16} 948710=(10010100001111)2=(22417)8=(250F)16

这种方法虽然方便书写,但在实际开发中仍不便于使用。因此,不同的操作系统、编程语言、应用领域等,其表示方法不尽相同,以下举几个例子。

首字法

顾名思义,在数字后方加上其进制的英文首字。

  • 八进制(oct):即加上小写“o”或大写“O”(ex: 22417 o 22417o 22417o),但其与数字 0 过于相似,因此较少使用。
  • 十六进制(hex):即加上小写“h”或大写“H”(ex: 250 F h 250Fh 250Fh)。

前缀法

在数字前加上前缀字,借此辨认进制,常用于各种编程语言。

  • 八进制(oct):时常会以数字“0”作为前缀,但容易与十进制(dec)产生混淆,实际使用较少。
  • 十六进制(Hex):则以“0X”作为前缀。

例如,常见的编程语言如 C/C++、Java、Python 等,皆使用字首“0x”来表示十六进制(ex: 0 x 7 f f f 54 b 6 b a b 8 0x7fff54b6bab8 0x7fff54b6bab8)。

编程示例(Java):

public class Main {
    public static void main(String[] args) {
        int dec = 9487; // 十进制
        int binary = 0b10010100001111; // 二进制 前缀表示法 0b
        int binary2 = 0b10_0101_0000_1111; // 二进制 前缀表示法二 0b(Java 7 后可使用“底线”帮助阅读,称为 Underscores in Numeric Literals)
        int oct = 022417; // 八进制 前缀表示法 0(不建议使用)
        int hex = 0x250F; // 十六进制 前缀表示法 0x

        System.out.println("十进制: " + dec);
        System.out.println("二进制 前缀表示法: " + binary);
        System.out.println("二进制 前缀表示法二: " + binary2);
        System.out.println("八进制 前缀表示法: " + oct);
        System.out.println("十六进制 前缀表示法: " + hex);
    }
}

/*
 * Result:
 *
 * 十进制: 9487
 * 二进制 前缀表示法: 9487
 * 二进制 前缀表示法二: 9487
 * 八进制 前缀表示法: 9487
 * 十六进制 前缀表示法: 9487
 *
 */

其他例子包括:

  • CSS 颜色的 hex 色码,会在前方加上“#”(ex: #E91E63),
  • URL 中使用的百分比编码,会在前方加上“%”(ex: %20 表示空格)。

总结

进制是每位开发者必备的基本功,本篇仅对进制进行了粗略介绍,尚未提及转换、负数、运算等内容,日后有空再补上。

最后,附上一张进制转换表供参考:

十进制 二进制 八进制 十六进制
0 0000 0 0
1 0001 1 1
2 0010 2 2
3 0011 3 3
4 0100 4 4
5 0101 5 5
6 0110 6 6
7 0111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 A
11 1011 13 B
12 1100 14 C
13 1101 15 D
14 1110 16 E
15 1111 17 F
16 10000 20 10

电脑常见单位:bit、bps、byte、octet、word、KB、KiB…

发表于 2017-01-30 郑中胜

位元(Bit)

计算机的资料以二进制数(Binary Digit)保存,称为位元(bit)。一个位元(bit)可以包含“0”“1”这两个数值,是计算机的最基本资料单位。

位元/秒(bps)

位元/秒(bps)意指 bit per second,位元速率经常在电信领域用作连线速度、传输速度(例如网速、USB)。

  • 1 Kbps = 1 0 3 10^3 103 bit/s = 每秒传输 1,000 bit
  • 1 Mbps = 1 0 6 10^6 106 bit/s = 每秒传输 1,000,000 bit
  • 1 Gbps = 1 0 9 10^9 109 bit/s = 每秒传输 1,000,000,000 bit

字节(Byte)

字节(byte),又称字节,为 8 = 2 3 8 = 2^3 8=23 个位元,是大部分计算机架构(architecture)中的定址单位(Byte addressing)。因此,有些计算机没有搬移一个“位元”的指令,但至少有搬移一个字节的指令。

Octet

Octet 为 8 = 2 3 8 = 2^3 8=23 个位元。虽然与字节(byte)相同,但 byte 过去作为储存大小单位,被广泛地使用于计算机领域,却无一致的定义。因此,现今许多计算机架构、网络协定(如 RFC5234)中,都会使用 Octet 来精准地表示 8 位元,避免造成误解。

字组(Word)

字组(word),又称字元组(注意:不同于字节 byte),并无规范大小。它是计算机架构中设计处理器(CPU)时处理资料的自然单位,是影响计算机设计的重要因素。一个字组(word)由一或多个位元组(byte)组成,其位元(bit)数量称为字组大小(word size)或字宽(word width)、字长(word length),字组大小通常对应于暂存器(register)宽度,常见的有 32 32 32 64 64 64 位元。

字(计算机) - 维基百科,自由的百科全书

KB、KiB、MB、MiB…

尽管许多计算机理论建立在二进制的基础上,许多通讯协定、储存系统等使用十进制作为计量单位(例如:你买了 8G 随身碟,以为是 8 × 1024 8 \times 1024 8×1024 MB,却发现比想象中的小很多)。

为避免混淆,国际单位制(SI)与国际电工委员会(IEC)分别制定了十进制与二进制的规范:

  • 十进制

    • KB(Kilobyte)= 1000 1000 1000 byte = 1 0 3 10^3 103 byte = 千字节
    • MB(Megabyte)= 1000 1000 1000 KB = 1 0 6 10^6 106 byte = 百万字节
    • GB(Gigabyte)= 1000 1000 1000 MB = 1 0 9 10^9 109 byte = 十亿字节
    • TB(Terabyte)= 1000 1000 1000 GB = 1 0 12 10^{12} 1012 byte = 兆字节
    • PB(Petabyte)= 1000 1000 1000 TB = 1 0 15 10^{15} 1015 byte = 千兆字节
    • EB(Exabyte)= 1000 1000 1000 PB = 1 0 18 10^{18} 1018 byte = 艾(艾可萨)字节
  • 二进制

    • KiB(kibibyte)= 1024 1024 1024 byte = 2 10 2^{10} 210 byte
    • MiB(Mebibyte)= 1024 1024 1024 KB = 2 20 2^{20} 220 byte
    • GiB(Gibibyte)= 1024 1024 1024 MB = 2 30 2^{30} 230 byte
    • TiB(Tebibyte)= 1024 1024 1024 GB = 2 40 2^{40} 240 byte
    • PiB(Pebibyte)= 1024 1024 1024 TB = 2 50 2^{50} 250 byte
    • EiB(Exbibyte)= 1024 1024 1024 PB = 2 60 2^{60} 260 byte

然而,长久以来的习惯是:

大家仍时常使用 MB、GB 等,代称 MiB、GiB。

位元速率

常用于传输速率的“位元/秒(bit per second, bps)”,用法依此延伸:

  • KB/s = kilobyte per second = 1 0 3 10^3 103 byte/s
  • KiB/s = kibibyte per second = 2 10 2^{10} 210 byte/s

因此:

  • 10 Mbps = 10 × 1 0 6 10 \times 10^6 10×106 bps = 1.25 MB/s = 1.1920929 MiB/s
  • 100 Mbps = 100 × 1 0 6 100 \times 10^6 100×106 bps = 12.5 MB/s = 11.920929 MiB/s

via:


网站公告

今日签到

点亮在社区的每一天
去签到