精华内容
下载资源
问答
  • 前两天早上上学,Vita哥哥忽然问我:爸爸你知道吗,1kB...答案:因为大写K已经代表温度(开尔文)了后来他又问我,为什么1kB有时候是1024字节,有时候是1000字节呢?这个问题很有意思,而且不太容易答对。说起这个1...

    前两天早上上学,Vita哥哥忽然问我:爸爸你知道吗,1kB可以是1000字节,但有时也可以是1024字节哦。

    我忽然想起来,他最近在看一本叫做《嘭!编程超有趣》的书,我翻了一下,里面确实有这个内容:

    ebba352cdcc501e0897502eced75d373.png

    右上角小贴士:为什么只有k是小写呢?

    答案:因为大写K已经代表温度(开尔文)了

    后来他又问我,为什么1kB有时候是1024字节,有时候是1000字节呢?这个问题很有意思,而且不太容易答对。说起这个1024,稍早一些接触计算机的人恐怕都曾被它搞糊涂过,现在10月24日还变成了“程序员节”,可见这个数字对计算机人士来说多么重要呢。

    计算机业界一直以来都习惯用1024作为数据容量单位前缀的倍数,比如1kB=1024B、1MB=1024kB、1GB=1024MB……这件事我估计大部分人还是知道的,比如在Windows里面查看硬盘容量,你会发现字节数换算成GB之后并不是一个整倍数:

    7f5cde614103dfec765277ea06b29a00.png

    其实这个107GB就是按照1024倍的关系算出来的,也就是把字节数除以1024的3次方得到的:

    afeac18dcae401044fabe5b80d97a293.png

    然而诡异的是,硬盘(也包括U盘、闪存卡等等)厂商标的那个容量,却是按照1000倍的关系计算的。也就是说,你买了一块500GB的硬盘,它的实际容量是500,000,000,000字节,如果你按照1024倍换算回去,就只有466GB了,足足少了34GB,这也就是为什么你在Windows里看到的磁盘容量永远是缩水的,就为了这事儿,硬盘厂商还被告过好几次,比如这次:

    ff8c79ec7b23a50889c7e7a25a7d9bd0.png

    正是因为这笔糊涂账,现在厂商在卖硬盘的时候,都会特别标明容量的计算方法,省得有人闲着没事再跑去投诉:

    1f4af5814bf8deac07e12a3b4aed5cf6.png

    摘自某品牌硬盘天猫商品描述

    但我们的问题是,为什么操作系统一定要用1024倍来计算呢?或者说,当初是因为什么原因,才产生了1024这种算法呢?

    其实当Vita哥哥问我这个问题的时候,我一瞬间认为这个问题很容易解释,因为计算机用的是二进制,自然要用2的幂来进位啦,这似乎挺自然的。

    但是说到这里我就发现有点说不通了。

    计算机用的是二进制没错,但那个代表的是计算机所处理的数据,而不是代表数据的数量。举个例子,现在有若干个储物柜,每个柜子可以装一位数,处理二进制的时候,柜子里只能放0或1,而处理十进制时,柜子里可以放0~9,仅此而已,但是这跟我有多少个柜子又有什么关系呢?

    《嘭!编程超有趣》那本书上面给出的解释是:“如果我们要处理的数字都是2的幂,那事情就会方便的多。Hmm,这个解释好像也挺含糊的,到底哪里方便呢?虽然书上写着“下一页我们会展开说”,但其实下一页说的只是二进制和十六进制之间的关系以及如何转换而已,并没有给出我们想要的答案。

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

    3e8a768fc9fd86b16be95b6231bdbeb8.png

    见过内存条吗?

    所谓寻址,就是访问内存里面特定的地方,就像按编号找到某个特定的储物柜一样。CPU里面有一个东西叫“地址总线”,这个东西用来编码要访问的内存地址,也就是储物柜的编号。地址总线就是一堆电线,跟CPU里的其他元件一样,每一根都只能表示0或者1,也就是说,它也是用二进制来工作的。那么,地址总线有多少根,就决定了CPU能编码多少内存地址,超过这个范围之后,即便你装再多的内存,CPU也用不上了,这个范围就叫做CPU的寻址能力

    我们计算一下,如果地址总线的长度是1,那么能编码的内存地址就是2的1次幂,也就是2个;地址总线的长度是2,就能编码2的2次幂,也就是4个地址;以此类推,地址总线的长度是N,CPU的寻址能力就是2的N次幂。

    剩下的事情你应该能自己琢磨明白了。既然CPU的寻址能力是按2的幂计算的,那么内存的容量也就应该按2的幂来设计,这样才能跟CPU的寻址能力匹配。比如说,一块CPU的地址总线长度为8,它的寻址能力是2的8次幂,也就是256,如果设计内存的人按100、200、300这样来设计内存容量,那永远也找不到合适的对不对?于是,内存容量就都被设计成了2的幂。

    0e5a3e2824605514895b9d2f705b45c3.png

    图片来源:https://www.jianshu.com/p/efe6deafa6a7

    一开始内存容量小的时候,也不存在单位换算的问题,比如我这个内存4096字节哦,也没啥问题。但是后来内存容量越来越大,工程师们感觉表达起来不爽了,这时他们想到,很多单位都有前缀,比如米→千米(km)克→千克(kg),那我们也搞一个“千字节(kB)”就好了吧。

    这时问题又来了,内存容量都是2的幂,就比如说4096吧,如果按1000进位的话,就要写成4.096kB,这一点儿都没有变短啊!似乎没什么卵用啊!于是工程师们拍脑袋一想,这样吧,我们就用1024进位好了,1024是2的10次幂,符合内存容量的设计习惯,比如说4096=4x1024,也就是4kB,你看,变短了很多吧!此外,1024跟1000挺接近的,也符合人类(主要是指欧美人)逢千计数的习惯,而且就算近似按1000估算也问题不大,真是两全其美!

    所以说,用1024来进位是内存寻址架构设计上的历史原因,但磁盘(软盘、硬盘)从一开始就没有这个问题,因为:第一,磁盘的寻址和CPU的架构没有关系(磁盘访问由操作系统负责);第二,磁盘的基本存储单位是“扇区”,而不是单个字节,一个扇区的容量不是固定的。这就意味着,磁盘容量没必要非要按2的幂去凑整,而是可以怎么方便就怎么来

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

    998ce4712da43c2f6708c8fa94c34be2.png

    索尼大法出品的3.5英寸软盘

    注意上面写着容量是1.44MB,其实是1440kB

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

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

    本来呢,这个差距也不是很大,但是让人们没想到的是,数据容量的增长速度实在太快了,才过了没几十年,我们身边的数据都已经按GB甚至TB来计算了。在kB尺度上,按1024计算和1000计算的误差只有2.3%,但放到TB尺度上,这个误差就被放大到了9%,这就已经完全无法忽略不计了,这也正是为什么磁盘容量进入GB时代之后,普通用户才开始纠结这件事

    3e8fc14c960df95f702c99bb36aacbe7.png

    不同数量级中按1000和1024计算单位所产生的误差

    那么,现在的问题是,1kB有时是1000字节,有时又是1024字节,这件事实在是太混乱了。根据国际单位(SI)的规定,k、M、G等等这些前缀之间的倍率关系都是1000,那么用1024就明显和SI是矛盾的。于是,国际电工委员会(IEC)想了一个方案,说那这样好了,凡是需要表示1024进位的,就用另外一套前缀:Ki、Mi、Gi,就是后面加个i,那么这样一来,1kB就是1000字节,而1KiB才是1024字节

    后来,IEC的这个方案变成了国际标准(ISO),所以严格来说,表示1024进位的时候一定要用IEC的这套新的前缀哦。在合规这方面,Ubuntu操作系统貌似是做得最好的,不信你看:

    020fadf14d82efd2a7d73de2b1090763.png

    注意内存容量都是用GiB或者MiB作为单位

    只有网络速率用的是“KB/秒”,这里的倍率是1000

    苹果的macOS系统里面,磁盘容量显示的单位也是按照1000倍率来换算的,不信你看:

    af2cfaddbbf2890a6f72dd18701cacd0.png

    已使用:362,041,094,144字节 (362.04GB)

    这里的GB也是按1000倍率换算的

    于是,只有Windows现在依然是一笔糊涂账,明明磁盘容量按1024换算,但显示用的却还是MB、GB这种按标准应该表示1000的单位。偏偏Windows用户又是最多的,于是很多人到现在还在这个问题上糊涂着——我买的硬盘,怎么系统里显示的容量就缩水了这么多呢?


    最后总结一下

    • 因为CPU寻址架构没变,所以内存容量现在依然是2的幂,即按1024倍率计算的。例如,你的电脑有4GB内存,严格来说应该写成4GiB,实际容量是4x1024x1024x1024个字节。

    • 硬盘、闪存等存储设备的容量都是按1000倍率计算的。例如,你的500GB硬盘,实际容量是500x1000x1000x1000个字节。但是,Windows会告诉你它的容量只有466GB,这不是硬盘的错,是Windows的错。

    • 网络带宽(传输率)也是按1000倍率计算的。例如,你家的宽带是100M,意思是最大传输率为每秒100x1000x1000个比特(8个比特是1个字节),也就是每秒12,500,000个字节。

    顺便,《嘭!编程超有趣》确实超有趣,感谢译者陈少芸老师赠阅,有兴趣的话点查看原文去某东买吧。

    P.S. 我没广告费,想支持我的话点在看或者点赞赏吧8c2a891cc3edd4947a14ce74b6d47d11.png

    79668a96256d74fa8110214037ddc5d1.png

    展开全文
  • 为什么 1KB 等于 1024 B

    千次阅读 2019-09-13 22:38:08
    以前学习的时候,在字节的单位换算上,只知道 1KB 相当于 1024B,认为人为规定的,也没去深究,这里说下自己的理解吧。 (1)一些基本概念 二进制位:英文 bit,作为计量单位简写 b 。计算机中信息存储以二...

    以前学习的时候,在字节的单位换算上,只知道 1KB 相当于 1024 B,认为是人为规定的,也没去深究,这里说下自己的理解吧。

    (1)一些基本概念

    二进制位:英文为 bit,作为计量单位简写为 b 。计算机中信息存储以二进制位为单位存储的,每个二进制位能表示 0 或 1 。

    字节:英文为 Byte,作为计量单位简写为 B 。为了方便描述有多少个二进制位,称 8 个二进制位为一个字节,所以 1 B = 8 b 。

    (2)B 与 KB 的进率关系

    首先字节是为了方便描述有多少个二进制位,而出现的概念,也就是二进制位的一种计量单位。

    当二进制位特别多时,单用字节来描述,数字也会写得特别多,所以又不断出现了 KB、MB、GB 等计量单位。

    我们知道千克与克的进率为 1000,即 1kg = 1000g,而人们在添加新的二进制位的计量单位,也有对应的参考:

    如果用 1KB = 1000 B,那么 1KB 就表示 1000 * 8 个二进制位。

    如果用 1KB = 1024 B,那么 1KB 就表示 1024 * 8 = 2^10 * 2^3 = 2^13 个二进制位。

    从上面的表示,我们就能看出一些端倪了:

    采用 1KB = 1024 B 的话,最终二进制位的个数可以用 2 的次方表示。而在计算机中,n 个二进制位可以组成 2 的 n 次方种状态。

    所以在进行 KB 到 B 的单位换算时,计算机正好用二进制值来存储有多少个二进制位,从而计算上很方便。

    综上:KB 与 B 的进率为 1024

     

     

     

    转载于:https://my.oschina.net/u/3185947/blog/3012090

    展开全文
  • 1KB (Kilobyte 千字节)=1024B 1MB (Megabyte 兆字节 简称“兆”)=1024KB 1GB (Gigabyte 吉字节 又称“千兆”)=1024MB ASCII 一个英文字母占1个字节,一个中文汉字占两个字节 UTF-8 一个英文字母占1个字节,一个...

    字节 byte:
    字节计算机信息技术用于计量存储容量的一种计量单位,通常情况下一字节等于八位,也表示一些计算机编程语言中的数据类型和语言字符。

    8个二进制位为一个字节(B),最常用的单位,字节也就是B。
    1KB (Kilobyte 千字节)=1024B
    1MB (Megabyte 兆字节 简称“兆”)=1024KB
    1GB (Gigabyte 吉字节 又称“千兆”)=1024MB

        ASCII  一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节
    
    
        UTF-8 一个英文字母占1个字节,一个中文汉字(含繁体)占三个字节。
        中文标点占三个字节,英文标点占一个字节
    
    
        Unicode 一个英文字母占两个字节,一个中文汉字(含繁体)占两个字节。
        中文标点占两个字节,英文标点占两个字节
    

    补充一点:字节跳动,人家的名字可不是随便就起的哈

    前台往后台传送东西其实就是字节以单位的形式
    截取项目的一段代码

     uploadVideoChange(file, fileList) {
          const videpType = file.raw.type == "video/mp4";
          const isLt40M = file.raw.size / 1024 / 1024 < 40;
          if (!videpType) {
            return this.$message({
              message: "上传的视频只能是mp4格式",
              type: "warning",
              center: true,
              offset: 100,
            });
          }
          if (fileList.length > 1) {
            //重置上传的封面列表
          }
          if (!isLt40M) {
            this.$refs.uploadVideo.clearFiles();
            return this.$message({
              message: "上传视频要小于40M",
              type: "warning",
              center: true,
              offset: 100,
            });
          }
          this.uploadVideo.videoFile = file;
        },
    
    展开全文
  • 字节 KB ASCII?

    2021-03-17 20:32:15
    3.1Kb为什么是1024b? 4.ASCII是什么鬼? 答: 1.不知道多少亿个。 2.因为是128个字符,第128是100000000,【System/360】奠定了字符存储单位采用8位长度的基础,这就是【1字节=8位】的由来。 3. 8乘128是多少? 4....

    在地铁上想到的内容,感觉记下来:
    1.内存条里的器件有多少个?
    2.一个字节为什么是8位?
    3.1Kb为什么是1024b?
    4.ASCII是什么鬼?
    答:
    1.不知道多少亿个。
    2.因为是128个字符,第128是100000000,【System/360】奠定了字符存储单位采用8位长度的基础,这就是【1字节=8位】的由来。
    3. 8乘128是多少?
    4.ASCII历史的选择。

    展开全文
  • 1MB=1024KB=2^10KB 2^10KB=2^20B 2^20B=2^20*8b=2^23b 按照这个运算逻辑,1M字节内存,地址编码应该需要23位二进制位。 但是因为内存中字节是最小的寻址单位,无法寻址到bit。所以此处的“位”指的多少“位”...
  • 先了解2个单词先:1、bit --位:位计算机中存储数据的最小单位,指二进制数中的一个位数,其值“0”或“1”。2、byte --字节字节是计算机存储...1B=8bit1Byte=8bit1KB=1024Byte(字节)=8*1024bit1MB=1024KB1...
  • 前提: 在学习基本数据类型之前,我们先认识一下这两个单词: 1、bit --位:位计算机中存储数据的最小单位,指二进制数中的一个位数,其值“0”或“1”。2、byte --字节字节是计算机存储容量的...1KB=1024...
  • 认识基本数据类型在学习基本数据类型之前,我们先认识一下这两个单词:1、bit --位:位计算机中存储数据的最小单位,指二进制数中的一个位数,其值“0”或“1”。... 1Byte=8bit (1B=8bit) 1KB=1024...
  • 1. Windows系统标准 在Windows系统中,数据的基本...1KB = 210 B = 1024B 1MB = 210 KB = 1024KB 1GB = 210 MB = 1024MB 1TB = 210 GB = 1024GB 2. 硬盘厂商标准 但是硬盘厂商计算容量以十进制标准(不论Windows标
  • 认识基本数据类型在学习基本数据类型之前,我们先认识一下这两个单词:1、bit --位:位计算机中存储数据的最小单位,指二进制数中的一个位数,其值“0”或“1”。... 1Byte=8bit (1B=8bit) 1KB=1024...
  • 前提:在学习基本数据类型以前,咱们先认识一下这两个单词:java一、bit --位:位计算机中存储数据的最小单位,指二进制数中的一个位数,其值“0”或“1”。...1Byte=8bit(1B=8bit)1KB=1024Byt...
  • 认识基本数据类型 在学习基本数据类型之前,我们先认识一下这两个单词:1、bit --位:位计算机中存储数据的最小单位,指二进制数中的一个位数,其值“0”或“1”。...1Byte=8bit (1B=8bit)1KB=1024B...
  • 认识基本数据类型在学习基本数据类型之前,我们先认识一下这两个单词:1、bit --位:位计算机中存储数据的最小单位,指二进制数中的一个位数,其值“0”或“1”。...1Byte=8bit (1B=8bit)1KB=1024Byt...
  • 1、计算机存储信息的最小单位,称之位(bit),音译比特,二进制的一个“0”或一个“1”叫一位。...3、计算机存储容量大小以字节数来度量,1024进位制:1024B=1K(千)B1024KB=1M(兆)B1024MB=1G(吉)B1024GB=1...
  • 字节(MB),他们的关系:1B=8b,1KB=1024B,1MB=1024KB,1GB=1024KB. 字符文字或符号的统称。   解释二:1个字节等于8个bit位,每个bit位又0/1两种状态也就是说一个字节可以表示256个状态,...
  • 2、计算机存储容量基本单位是字节(Byte),音译拜特,8个二进制位组成1字节。一般而言:一个标准英文字母占一个字节位置,一个标准汉字占二个字节位置。 3、计算机存储容量大小以字节数来度量,1024进位制:  ...
  • 2、计算机存储容量基本单位是字节(Byte),音译拜特,8个二进制位组成1字节,一个标准英文字母占一个字节位置,一个标准汉字占二个字节位置。 3、计算机存储容量大小以字节数来度量,1024进位制: 1024B=1K(千...
  • 单位换算1 Byte(B) = 8 bit1 Kilo Byte(KB) = 1024B1 Mega Byte(MB) = 1024 KB1 Giga Byte (GB)= 1024 MB1 Tera Byte(TB)= 1024 GB1 Peta Byte(PB) = 1024 TB从上可以了解计算机最小的存储单位bit,即一位二进制数...
  • 计算机存储信息的最小单位,称之位(bit),音译比特,二进制的一...   计算机存储容量大小以字节数来度量,1024进位制: 1024B=1K(千)B 1024KB=1M(兆)B 1024MB=1G(吉)B <b
  • 博主最近正在学习微机原理与接口技术、计算机组成原理等专业课程,产生了一个疑问:假设地址总线为10位,为什么就可以访问1KB的内存?难道不该13位,才能访问1KB的内存吗?认真思考过的小伙伴,应该都会有这个疑问...
  • 2、计算机存储容量基本单位是字节(Byte),音译拜特,8个二进制位组成1字节,一个标准英文字母占一个字节位置,一个标准汉字占二个字节位置。 3、计算机存储容量大小以字节数来度量,1024进位制: 1024B=1K...
  • 字符与字节

    2019-11-04 14:15:52
    2、计算机存储容量基本单位是字节(Byte),音译拜特,8个二进制位组成1字节。一般而言:一个标准英文字母占一个字节位置,一个标准汉字占二个字节位置。 3、计算机存储容量大小以字节数来度量,1024进位制:  ...
  • 1M宽带等于多少KB/S?

    千次阅读 2019-01-26 17:25:25
    所说的带宽是1M是指1024比特(bit),而实际测下载速率的时候用的是KB/S是指的K字节(byte)每秒,1...1M带宽的理论下载速度通常是1024/8=128KB/S。 5Mbps=625KB 8Mbps=1Mb/s=1024kb/s =======================...
  • 我看到上面的答案都不把B转换成bit,这是为什么呢?书上说如果有N根地址线,那么地址总线宽度为2^N,而一根地址线只有0、1两种状态的二进制,那我自然应该先把单位转换成bit才能用2^N这个公式吧?实在不明白为什么要...
  • 存储单位  计算机存储单位一般用B,KB、MB、GB、TB、PB、EB、ZB、YB、BB来表示,它们之间的关系:  位 bit (比特)(Binary Digits):存放一位...1KB (Kilobyte 千字节)=1024B,  1MB (Megabyte 兆字节 简称“兆”)
  • 字节输入流一次读取多个字节的方法 int read​(byte[] b) 从该输入流读取最多 b.length个... 数组的长度定义1024(1kb)或者是1024的整数倍 2、方法的返回值int是什么? 每次读取的有效字节个数 String类的...

空空如也

空空如也

1 2 3 4 5
收藏数 98
精华内容 39
关键字:

为什么1kb是1024字节