当前位置: 首页 > news >正文

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

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

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


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

发表于 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; // 二进制 前缀表示法 0bint binary2 = 0b10_0101_0000_1111; // 二进制 前缀表示法二 0b(Java 7 后可使用“底线”帮助阅读,称为 Underscores in Numeric Literals)int oct = 022417; // 八进制 前缀表示法 0(不建议使用)int hex = 0x250F; // 十六进制 前缀表示法 0xSystem.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 表示空格)。

总结

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

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

十进制二进制八进制十六进制
0000000
1000111
2001022
3001133
4010044
5010155
6011066
7011177
81000108
91001119
10101012A
11101113B
12110014C
13110115D
14111016E
15111117F
16100002010

电脑常见单位: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:

  • 进制简介 (二进制、八进制、十进制、十六进制) - NotFalse 技术客
    https://notfalse.net/14/numeral-system-intro

  • 电脑常见单位: bit、bps、byte、octet、word、KB、KiB… - NotFalse 技术客
    https://notfalse.net/16/basic-unit

相关文章:

  • 医疗行业如何构建合成数据平台?——技术、合规与实践全景
  • 数据结构-Map和Set
  • 第 8 期:条件生成 DDPM:让模型“听话”地画图!
  • 元宇宙概念兴起,B 端数字孪生迎来哪些新机遇?
  • 考研408第一章计算机系统概述——1.1-1.2操作系统的基本概念与发展历程
  • java基础从入门到上手(九):Java - List、Set、Map
  • Java并发编程高频面试题(已整理Java面试宝典PDF完整版)
  • 笔记整理五
  • Scrapeless Scraping Browser: A high-concurrency automation solution for AI
  • 【C++深入系列】:模版详解(上)
  • 群辉默认docker数据存储路径
  • Webpack基础
  • DFS/BFS专练-搞定图论基础!(从海岛问题过渡至图论基础应用C++/C)
  • 【Pandas】pandas DataFrame where
  • 基于微信小程序的中医小妙招系统的设计与实现
  • python抓取HTML页面数据+可视化数据分析(投资者数量趋势)
  • Function Calling的机制 (含示例)
  • SpringAI 学习笔记
  • 斐波那契数列计算:数据结构与算法视角
  • 【MySQL】初识数据库
  • 涉军民事案件类型日益增多,最高法新规明晰管辖争议问题
  • 儒说︱问世间孝为何物
  • 全球84%的珊瑚礁已遭受白化事件影响
  • 外交部:中方在黄海暂定海域建造渔业养殖设施,同中韩海域划界无关
  • 国防部:菲挑衅滋事违背地区国家共同利益
  • 嫦娥五号《月球样品借用协议》签约,2025中国航天公益形象大使公布