b、B、KB、Kib、MB、MiB、GB、GiB、TB、TiB的区别

news2025/2/27 8:16:02

1024这个数字,想必计算机行业从业人员应该不会陌生,甚至10月24日还被当做程序员日,如果你问一个程序员1GB等于多少MB,他大概率会不假思索回答:1024

没错,对于稍微对计算机或者网络有了解的人,一般都认为1024是数据容量单位换算的倍数,例如1GB = 1024MB1MB = 1024KB1KB = 1024B…然而实际情况并非如此,里面有很多历史遗留问题。

bit/比特

binary digit(二进制数位)的简称,中文音译读作比特,也可以叫二进制位位元。指二进制中的一位,即01,是计算机内部数据储存的最小单位,也可缩写为b

我们电脑中存储的各种文件,网络请求发送的数据包,本质上都是01的组合。 多个bit组合在一起就可以表示出不同的值

bit数量可表示的值(二进制)
10、1 (21)
200、01、10、11 (22)
3000、001、010、011、111、110、100、101 (23)

N位bit可以组合表示出2N个不同的值。

byte/字节

中文译为字节,也可以叫位组位元组。可缩写为B

字节的定义

是一种计算机领域中的信息计量单位,是针对通信与数据存储时的一个概念。当我们使用字节来描述某一段信息或数据时,我们并不用去考虑该段信息是属于何种数据类型。

byte一词的由来

byte一词是Werner Buchholz于1956年6月在IBM Stretch计算机的早期设计阶段发明的,其英文byte来源于Bite(咬)一词,为了与bit做一区分,特地变‘i’为’y‘,成为我们今天所看到的byte,也可简写为大写B

字节在诞生伊始,其目的仅是表示用于编码单个字符所需要的比特(bit)数量,并且在不同的应用中或使用不同的编码方式时,这一数量的大小也不尽相同。

1字节 = 8 比特 ?

当我们提起字节(byte)这一概念时,很多人都会下意识的想到“一个字节等于八个比特”这一公理。那么一个字节是否真的就等于八个比特呢?

历史上字节长度曾基于硬件为1-48比特不等,之后有一段时间则常使用6比特9比特为一字节。

如果计算机完全以二进制工作,并且只对二进制数字进行了计算,那么就不会有字节。但如果要使用字符,我们就必须对这些符号进行编码。

在计算机出现早期,我们只需要使用计算机来处理整数运算,所以也只需要编码数字0-9十个字符,再加上加号’+‘与减号’-‘两个算数运算符,共计11种字符,此时我们只需4比特来进行编码就足够表示了。再后来我们又需要对字母进行处理,大小写字母加上数字,再加上例如逗号等标点符号,这时大概有了70多种字符,此时我们需要7比特来进行编码才能够表示完全。

而之所以最后确定8bit1Byte,而不是7bit,可能是因为当时IBM360系统使用8位字符,并且byte这个词被大量使用,且8是2的幂次方,比7更加适合2进制的计算机(Powers of 2 are magic!),所以最后大家就都接受了1byte=8bit

Octet

Octet 定义为由八个比特组成的信息单位,中文译作八位组

在今天的语境下,一般认为1byte = 8bit,但是上面说了,其实严格来说1byte并不等于8bit,所以Octet诞生了,用来表示八位字节,即8bit

Octet可简写为o,1MB可写为1Mo(兆八位字节)1KB可写为1Ko(千八位字节),不过这种写法一般在byte代表的bit数量不明确,可能出现歧义,需要明确1byte = 8bit时使用!

发展

随着科技和硬件的发展,内存变得越来越大,使用byte为单位来标识容量将会显得很大,比如4096byte,不利于阅读,于是人们想到了进位,就像m进位到km(1km=1000m)、g进位到kg(1kg=1000g),那么按理说byte也可以像其他国际制单位一样,以10进制的1000(103)进位,即1kB = 1000B,那么为什么最后却变成以2进制的1024(210)进位呢?

注意:严格来说kIS(国际单位制)中代表千,即103,书写应为小写,非正式场合也可以使用大写K,但在日常书写中,大写K更普遍被人们使用

1024进制的由来

那当初到底为什么出现了1024呢?其实这个问题和计算机内存的寻址系统有关。

所谓寻址,就是寻找内存里面特定的地址,就像按编号找到众多储物柜中的某一个。
CPU里面有一个东西叫“地址总线”,这个东西用来编码要访问的内存地址,也就是储物柜的编号,例如001010

地址总线就是一堆电线,一个CPU有N根地址线,那么可以说这个CPU的地址总线的宽度为N。跟CPU里的其他元件一样,每一根都只能表示0或者1,也就是说,它也是用二进制来工作的。那么,地址总线有多少根,就决定了CPU能编码多少内存地址,这个范围就叫做CPU的寻址能力。

我们可以算一下,如果地址总线数量是1,能编码的内存地址就是0或者1、也就是2个,即21,;地址总线数量是2,能编码的内存地址就是00011011,也就是4个,即22;以此类推,地址总线数量是N,CPU的寻址能力就是2N

既然CPU的寻址能力是按2的幂计算的,也就是说CPU只能编码2N个内存地址,那么内存的容量也就应该按2的幂来设计,这样才能跟CPU的寻址能力匹配。比如说,一块CPU的地址总线数量为10,它的寻址能力是210次幂,也就是1024,即00000000000000000001000000001000000000111111111111。如果设计内存的人按1000、2000、3000这样来设计内存容量,那永远也找不到合适的对不对?于是,内存容量就都被设计成了2的幂,以这里的10个总线为例,就是内存容量需要是1024的倍数。

上面说到,最早人们也是考虑像其他国际制单位一样,以1000进位,但是因为内存寻址的机制,最后选择了2的幂,即1024,而且那时候内存容量也小,以MB为单位,1024又比较接近1000,1MB=1024KB还是1MB=1000KB,误差并不是很大,所以就将1024看做近似1000使用。

混乱出现

你可能疑问,既然大家都是以二进制的1024为基准进行进位,哪儿来的误差?恰巧,问题就出现在这里。磁盘(软盘、硬盘)从一开始就没有类似内存寻址这个问题,因为:第一,磁盘的寻址和CPU的架构没有关系(磁盘访问由操作系统负责);第二,磁盘的基本存储单位是“扇区”,而不是单个字节,一个扇区的容量不是固定的。这就意味着,磁盘容量没必要非要按2的幂去凑整,而是可以怎么方便就怎么来。

IBM个人电脑上用的软盘为了迎合内存容量的二进制习惯,规定一个扇区的容量是512字节,那么两个扇区的容量就是1024字节,也就是1kB。因此,我们以前用的360kB720kB的软盘,它们的 1kB都代表1024字节,但后来出现的高密度软盘,容量写的是1.44MB,按1MB=1024KB换算应该是1.44*1024=1474KB,但实际上它的容量是720kB软盘的两倍,即1440KB,是按1MB=1000KB换算的,在这个节骨眼上,软盘厂商居然玩起了精分,让1KB=1024B,而1MB=1000KB,真是又一笔糊涂账

相比之下,硬盘厂商就专一多了。硬盘因为容量大,一开始就是MB尺度了。从20世纪70年代起,硬盘厂商在标示容量时就是按1000进位计算的,而这种标准沿用了几十年,到今天也依然是雷打不动。

这笔糊涂账让做操作系统的很是为难。毕竟,内存容量和磁盘容量的算法不一样,你让操作系统怎么显示才好呢?结果呢,当初几乎所有的操作系统都采用了内存的二进制标准,也就是按1024进位,那么磁盘容量也就跟着保持一致,也按照1024进位来计算,于是系统显示的容量就和硬盘上标示的容量有差距了。

还有更混乱的,在windows系统中,系统以1024对硬盘容量进行换算显示,而在MAC OSLinux中系统又是以1000进行换算的,好嘛,真是乱上加乱!!!

如果分别以10241000进行换算,误差在24/1000=2.4%,在那个计算机还不发达的年代,似乎并不会有太大的问题,但是随着计算机的发展,硬盘容量越来越大,单位也由MB发展到GBTB,
TB这个量级,误差已经被放大到9.95%,这也是为什么我们买的标识为500GB硬盘在电脑上显示小于500GB的原因。

1956年IBM公司制造出世界上第一块硬盘350RAMAC,不是GB为单位,而是以MB为单位,大小为5MB。

改变

1KB有时是1000字节,有时又是1024字节,这件事实在是太混乱了。而根据国际单位(SI)的规定,k、M、G等等这些前缀之间的倍率关系都是1000,那么用1024就明显和SI是矛盾的。于是,国际电工委员会(IEC)想了一个方案,说那这样好了,凡是需要表示1024进位的,就用另外一套写法:Kibibyte(giga binary byte的缩写)、MebibyteGibibyte,可简写为Ki、Mi、Giibinary(二进制)缩写,换算关系如下:

2进制10进制
1Kibibyte = 1KiB = 1024B1Kilobyte = 1KB = 1000B
1Mebibyte = 1Mib = 1024Kib1Megabyte = 1MB = 1000KB
1Gibibyte = 1Gib = 1024Mib1Gigabyte = 1GB = 1000MB
1Tebibyte = 1Tib = 1024Gib1Terabyte = 1TB = 1000GB

后来,IEC的这个方案变成了国际标准(ISO),所以严格来说,表示1024进位的时候一定要用IEC的这套新的前缀。比如硬盘若以1000进位,则应标注为500BiB。然而实际情况是,现在硬盘厂商是按1000换算且标识为GBTB,是对的,而电脑系统却是以1024进行换算,但又显示的是GBTB;内存条是按1024换算的,但是标识的是GB,标识单位错误
在这里插入图片描述

在这里插入图片描述
Mac OS倒是以1000进位的,但是单位却是GB,害,真让人哭笑不得😂
在这里插入图片描述
不过好像Linux系统做的好一点
在这里插入图片描述

没办法,这都是历史遗留问题,大家都用习惯了,希望有一天可以统一标准!!!

其他

在通信行业,我们经常听到千兆宽带这个词,或者看到宣传页上写的1000M宽带,家里装了500M的宽带,但是下载游戏却只有每秒几十兆,这是怎么回事呢?

通信行业的基础是传输,而传输的基本单位是二进制码元,也就是bit,以通信中传输速率的单位是bps(bit per second),也就是bit/s(每秒多少比特)。传输是的速率可能为任意整数,不一定为2的倍数,所以没有必要使用K=1024这种人类不擅长的二进制,而是使用K=1000的十进制形式,即 1B= 8b(这个是不变的),1KB = 1000B,1MB = 1000KB,1GB = 1000MB。

所以在描述带宽时,1000兆宽带的正确写法应该是1000Mbps或者1Gbps,这里的b为小写,代表bit,MG代表百万(106),所以1000Mbps带宽就代表理论上,每秒可传输1000/8 * 106= 125 * 106B =125 * 103KB = 125MB的数据,也就是理论上网速最快为125MB/s,这里计算除以8其实就是将b换算为B,最后除1000换算成KBMB

在这里插入图片描述

一个字节(Byte)一定等于八个比特(Bit)吗
一字节为什么等于八比特?
KB和kb,傻傻分不清楚
电脑里的1kB到底是1000字节还是1024字节?
KB/KiB,MB/MiB,GB/GiB,它们的区别

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/39260.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最短路算法 - dijkstra

最短路算法 - dijkstra1. 算法介绍2. 实战2.1 Reachable Nodes In Subdivided Graph3 参考1. 算法介绍 算法目的:求图中某点 s 到其余各点的最短距离 算法步骤: 初始化距离数组 dis 和优先级队列,其中 dis[i] 表示 s 点到当前 i 点的最短距…

树莓派上搭建SVN服务器

目录 一、服务端安装步骤 1.安装svn 2.创建目录 3.创建版本仓库 4.修改配置(authz,passwd,svnserve.conf) 5.启动服务 二、tortoisSVN客户端安装 三、结束 一、服务端安装步骤 1.安装svn sudo apt-get install subversion 2.创建目录 sudo m…

品RocketMQ 源码,学习并发编程三大神器

这篇文章,笔者结合 RocketMQ 源码,分享并发编程三大神器的相关知识点。 1 CountDownLatch 实现网络同步请求 CountDownLatch 是一个同步工具类,用来协调多个线程之间的同步,它能够使一个线程在等待另外一些线程完成各自工作之后&…

selenium--获取页面信息和截图

获取页面信息namecurrent_urltitlecurrent_window_handlewindow_handlespage_source简单用法—— 判断页面截图1.get_screenshot_as_png2.get_screenshot_as_file获取页面信息 主要方法如下图: 介绍一下常用的方法: name 获取浏览器名字 current_u…

Packet Tracer 实验 - 排除多区域 OSPFv3 故障

地址分配表 设备 接口 IPv6 全局单播地址 IPv6 本地链路地址 默认网关 ISP GigabitEthernet0/0 2001:DB8:C1:1::1/64 FE80::C1 不适用 ASBR GigabitEthernet0/0 2001:DB8:C1:1::2/64 FE80::7 不适用 Serial0/0/0 2001:DB8:A8EA:F0A::1 FE80::7 不适用 S…

如何通过 kubectl 进入 node shell

概述 假设这样一个场景: 生产环境中,Node 都需要通过堡垒机登录,但是 kubectl 是可以直接在个人电脑上登录的。 这种场景下,我想要通过 kubectl 登录到 K8S 集群里的 Node,可以实现吗? 可以的&#xff…

LinkedList与链表

目录 1.链表 2.链表的模拟实现 3.LinkedList的模拟实现 4.LinkedList的使用 4.1 什么是LinkedList 4.2 LinkedList的使用 5.ArrayList和LinkedList的区别 我的GitHub:Powerveil GitHub 我的Gitee:Powercs12 (powercs12) - Gitee.com 皮卡丘每天学…

机器人十大前沿热点领域(2022-2023)

中国电子学会嵌入式系统与机器人分会主任委员、北京航空航天大学机器人研究所名誉所长、中关村智友研究院院长王田苗博士出席大会闭幕式,并现场发布《机器人十大前沿热点领域(2022-2023)》。归纳出2022-2023年机器人十大前沿技术;并结合我国国情和机器人…

自动化项目倍加福测距仪QSM WCS RS485 与西门子S7 200通信

1、程序流程图 2、WCS位置数据处理流程 第一步:设置S7-200的RS485的通讯波特率19.2kbps,通讯格式(8,1,E); 第二步:PLC向WCS发送请求码: A0A1为0,表示读码器地…

现代密码学导论-16-选择明文攻击和CPA安全

目录 PCA不可区分实验 DEFINITION 3.21 PCA安全的加密方案 LR预言机实验 DEFINITION 3.22 多明文PCA安全的加密方案 THEOREM 3.23 定义3.21和定义3.22等价 PCA不可区分实验 通过运行G(1^n)获得密钥k敌手A被给定输入1^n并拥有访问预言机Enck()的权利,敌手A输出一…

想要精通算法和SQL的成长之路 - 无重叠区间

想要精通算法和SQL的成长之路 - 无重叠区间前言一. 无重叠区间前言 想要精通算法和SQL的成长之路 - 系列导航 一. 无重叠区间 原题链接 给定一个区间的集合 intervals ,其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互…

神经网络和深度学习-处理多维特征的输入

处理多维特征的输入 前面有两个数据集,一个回归,一个分类。 在回归中输出y属于实数,而在分类中输出y属于一个离散的集合 例如在糖尿病分类的数据集中Diabetes Dataset,每一行作为一个sample(样本)&#x…

Node.js 入门教程 11 Node.js 从命令行接收参数

Node.js 入门教程 Node.js官方入门教程 Node.js中文网 本文仅用于学习记录,不存在任何商业用途,如侵删 文章目录Node.js 入门教程11 Node.js 从命令行接收参数11 Node.js 从命令行接收参数 当使用以下命令调用 Node.js 应用程序时,可以传入任…

Android -- 每日一问:两个 Activity 之间如何传递参数?

经典回答 使用 Intent 的 Bundle 协带参数,就是我们常用的 Intent.putExtra 方法。 除了传递基本类型外,如何传递自定义的对象呢? 这个问题就是想引出 Android 的 Parcelable 。一般很多面试者都有用过传递实现了Serializable接口的自定义对…

JavaWeb学习-监听器

什么是监听器? 类似于前端的事件绑定,java中的监听器用于监听web应用中某些对象、信息的创建、销毁、增加,修改,删除等动作的发生,然后作出相应的响应处理。当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法。…

Flutter高仿微信-第54篇-群聊-邀请好友

Flutter高仿微信系列共59篇,从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。 详情请查看 效果图: 实现代码: import package:flutter/material.dart; import package…

【JavaEE】HTML

努力经营当下,直至未来明朗! 文章目录前言一、HTML概述二、【HTML常见标签】1. 注释标签2. 标题标签:h1-h63. 段落标签:p4.换行标签:br5.【格式化标签】5. 图片标签:img 【单标签,没有结束标签】…

HTML+CSS简单漫画网页设计成品 蜡笔小新3页 大学生个人HTML网页制作作品

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 ⚽精彩专栏推荐&#x1…

GreenPlum AOCO列存读IO原理

GreenPlum AOCO列存读IO原理GP自带AOCO列存,它的IO和heap表的IO是分开的。Heap表的脏数据由checkpoint或后台write进程刷写,也就是FlushBuffer函数调用smgrwrite。由magnetic disk storage manager管理IO模块。但是AOCO列存则是由本身进行管理&#xff0…

【信息融合】BP神经网络和DS证据理论不确定性信息融合问题【含Matlab源码 2204期】

⛄一、 D-S证据理论及解释 证据理论由Dempster在1967年最初提出,并由他的学生Shafer改进推广使之成为符合有限离散领域中推理的形式,因此称为D-S理论。证据理论讨论一个“辨识框架”(Frame of Discernment)Θ,它是关于命题的相互独立的可能答案或假设的一个有限集合。按传统方…