计算机领域SI单位,为什么对计算机存储单位(K,M,G,T)换算,总是糊里又糊涂?

本文探讨了计算机存储容量单位的混乱现象,包括GB与MiB的区别,历史上1GB=1024MB的由来,以及SI与二进制单位的区分。作者揭示了术语G/M的真正含义,并介绍了IEC提出的二进制词头解决办法。

转自:http://www.cnblogs.com/lumnm/archive/2012/02/08/2342374.html

对于计算机专业的童鞋来说,大概对计算机存储单位换转换不算陌生,但是往往有力不从心总是感到迷迷糊糊。原因是不同书本、不同领域对他们的定义不尽相同。比如,计算机网络中1Kb=1000b,而操作系统和计算机组成原理中却用1Kb=1024b,1Mb=1024Kb 。。。,一般来说软件厂商如微软用1024,硬件厂商用1000。词头加在SI单位(非SI单位也可以使用并通常遵循此用法)之前表示10的整数幂次,譬如k表示10^3=1000,M表示10^6=1,000,000,G则表示10^9=1,000,000,000。举些例子,1kg=1000g,1km=1000m,1GeV=1,000,000,000eV=1,0

先明确一个关键问题,什么是G,什么是M?

G和M是国际单位制(SI)中所规定的词头(prefix)。词头加在SI单位(非SI单位也可以使用并通常遵循此用法)之前表示10的整数幂次,譬如k表示10^3=1000,M表示10^6=1,000,000,G则表示10^9=1,000,000,000。举些例子,1kg=1000g,1km=1000m,1GeV=1,000,000,000eV=1,000MeV,都是大家所熟悉的用法。24K金那个K和SI可没关系,24K的K也不是词头,因为后面没有单位。回到正题上来,虽然B并不是SI单位,但考虑到SI前缀不应用于2的幂次的明确要求,此处1GB应该是10^9B=1000*10^6B=1000MB。从这个意义上来说,硬盘厂商的标注没有错。

那么经常听到的1GB=1024MB的说法是怎么来的?这就要从计算机的童年时代说起。

起先计算机的存储容量低到可怜,几千个Byte算是很奢侈的容量,由于计算机的二进制特性,这个容量通常是2的整数次幂,用起来不方便。IT工程师们发现 2^10=1024与k=10^3接近,相差不过2%。于是就有人偷懒以1kB表示2^10B也就是1024B,初看起来一切都好,2%的差距并不大,时间长了大家也就接受了。

但问题在于,随着计算机的存储容量依摩尔定律(Moore’s Law)以指数增长,这个差值会越来越大。1kB与1KiB(稍后解释)相差不过2%,1MB与1MiB相差近5%,1GB与1GiB相差7%,1TB和 1TiB足足差了10%。可以预见,随着硬盘容量的进一步扩大,希捷为了这几个字母复杂多变的含义所吃的官司会越来越多。

时至今日,在IT业中已经形成了如下的这种混乱局面:

CPU厂商计算频率时认为1GHz=10^9Hz,内存厂商认为1GB=2^30B,硬盘/闪存则是1GB=10^9B,微软则坚持认为1GB= 2^30B。通信工程师们认为千兆以太网的位速率是1Gbit/s=10^9bit/s,32bit 33.3MHz的 PCI在一个周期内可以传输4Byte,带宽也就成了133.3MB=133.3*10^6B。更有甚者还有混着用的:1.44MB软盘的容量是奇怪的 1474560B。80柱面*2磁头*18扇区一共是2880个512B的扇区,于是就被叫成了1.44MB。如果我买了一台电脑拥有2.4GHz的 CPU/2GB的内存/320GB的硬盘/双GbE,那么这4个G中,唯独第2个的含义与众不同。

看来当初的偷懒做法和造成千年虫问题的节约搞法一样愚蠢是么?确实如此。为了解决这个混乱的局面,还是有人做过努力。早在1998年SI手册中明确要求SI词头不应用于2的幂次。而同年国际电工委员会(IEC)推出了一套适用于2进制的词头,并且得到了IEEE的批准 (IEEE 1541)——不过这还是一个试用的标准。简单来说就是在SI词头后加"i"。比如说k就成了Ki,M成了Mi,G成了Gi。发音把原来SI词头的第二个音节换成[bi]。譬如Ki念 [kibi],Mi念[mebi],Gi则是[Gibi]等等依此类推。这样,kMG之类的的SI词头回复原来的含义,表示2幂次重任就交给了Ki= 2^10=1024,Mi=2^20=1048576,Gi=2^30=1073741824等等。这么一来,当表述一台电脑是3.15GHz CPU/2GiB内存/320GB硬盘时,G/Gi的含义就不存在歧义。很简明易懂的解决方案,然而很不幸似乎买IEC帐的着实不多,目前支持IEC词头的软件屈指可数——可喜的是其中包括Linux核心。更糟糕的是1G= 1024M这种约定俗成的错误观念已经根深蒂固。如果说千年虫问题到2000年就基本告一段落,而kMGTP这几个普普通通的字母带来的混乱,还会持续多久呢?

硬盘厂商将1GB定义为1,000,000,000B的常规做法又一次成为了争论的焦点。为了帮助对此有疑惑的网友搞清楚一些容易混淆的背景情况,草成此短文。水平有限,如有错误或是火星之处还请口下留情。CPU厂商计算频率时认为1GHz=10^9Hz,内存厂商认为1GB=2^30B,硬盘/闪存则是1GB=10^9B,微软则坚持认为1GB= 2^30B。通信工程师们认为千兆以太网的位速率是1Gbit/s=10^9bit/s,32bit 33.3MHz的 PCI在一个周期内可以传输4Byte,带宽也就成了133.3MB=133.3*10^6B。更有甚者还有混着用的:1.44MB软盘的容量是奇怪的 1474560B。80柱面*2磁头*18扇区一共是2880个512B的扇区,于是就被叫成了1.44MB。如果我买了一台电脑拥有2.4GHz的 CPU/2GB的内存/320GB的硬盘/双GbE,那么这4个G中,唯独第2个的含义与众不同。

在物理量单位换算中,"T"、"M" 和 "K" 分别代表不同的国际单位制(SI)前缀,用于表示数量级。这些前缀常用于科学、工程和日常计算中,方便表示非常大或非常小的数值。 - **T(Tera)**:表示 $10^{12}$,即 1,000,000,000,000 - **M(Mega)**:表示 $10^6$,即 1,000,000 - **K(Kilo)**:表示 $10^3$,即 1,000 ### 单位换算方法 1. **将“T”转换为基本单位** 乘以 $10^{12}$ 例如:1 TB(太字节) = $1 \times 10^{12}$ 字节 2. **将“M”转换为基本单位** 乘以 $10^6$ 例如:1 MHz(兆赫兹) = $1 \times 10^6$ Hz 3. **将“K”转换为基本单位** 乘以 $10^3$ 例如:1 km(公) = $1 \times 10^3$ 米 4. **将基本单位转换为“T”** 除以 $10^{12}$ 或乘以 $10^{-12}$ 例如:1,000,000,000,000 字节 = 1 TB 5. **将基本单位转换为“M”** 除以 $10^6$ 或乘以 $10^{-6}$ 例如:1,000,000 Hz = 1 MHz 6. **将基本单位转换为“K”** 除以 $10^3$ 或乘以 $10^{-3}$ 例如:1000 米 = 1 km 7. **在不同前缀之间换算时** 可以先将数值转换为基本单位,再转换为目标前缀 例如:将 2 MJ(兆焦耳)转换为 kJ(千焦耳) $2 \times 10^6$ J = $2000 \times 10^3$ J = 2000 kJ ### 示例代码(Python) ```python def convert_prefix(value, from_prefix, to_prefix): prefix_values = { 'T': 1e12, 'G': 1e9, 'M': 1e6, 'k': 1e3, 'default': 1 } base_value = value * prefix_values.get(from_prefix, 1) converted_value = base_value / prefix_values.get(to_prefix, 1) return converted_value # 示例:将2M转换为k print(convert_prefix(2, 'M', 'k')) # 输出 2000 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值