我知道这个问题听起来很愚蠢,但让我解释一下。所以...
每个人都知道字节是8位。简单吧?但是到底在哪里指定呢?我的意思是,实际上,您并不是真正使用字节,而是位。例如驱动器。据我了解,它只是一个相当长的字符串,由1和0组成,而没有字节。当然,有部门,但是据我所知,是在软件级别进行编程的(至少我认为是在SSD中)。还有RAM,这又是-一长串的一和零。另一个例子是CPU。它一次不会处理8位,而只能处理一位。
那么到底在哪里指定呢?还是仅仅是每个人都遵循的一般规则?如果是这样,我是否可以使一个字节使用9位的系统(操作系统或更低级别的东西)?还是我不必?另外-为什么您不能使用少于一个字节的内存?或者也许可以?例如:两个应用程序是否可能使用相同的字节(例如,第一个使用4位,第二个使用其他4位)?最后但并非最不重要的一点-计算机驱动器是否真的使用字节?还是例如1-8位属于某物,在它们旁边有3个随机位而12-20位属于某物?
我知道有很多问题,知道这些问题的答案不会改变任何东西,但我只是想知道。
编辑:好的,我可能表示自己不够清楚。我知道字节只是一个概念(嗯,偶数只是我们实现的一个概念)。我不是在问为什么字节中有8位以及为什么字节作为一个术语存在。我要问的是,计算机在哪里定义了字节,或者甚至定义了字节。如果确实在某个地方定义了字节,那么定义在什么级别(硬件级别,OS级别,编程语言级别或仅在应用程序级别)?我还问计算机是否甚至在乎字节(按照我们已经实现的概念),如果它们不断使用字节(例如在两个字节之间,是否会有3个随机位?)。
答案 0 :(得分:1)
是的,它们是真正的信息,它们具有定义和标准化的使用/理解。维基百科上有关字节的文章说:
ISO / IEC 2382-1:1993中记录的八位现代事实上的标准,是两个的方便幂,允许一个字节使用0到255的值(2的幂为8 = 256,其中零也表示数字)。[7]国际标准IEC 80000-13编纂了这一通用含义。许多类型的应用程序使用八位或更少位表示的信息,处理器设计人员针对这种常见用法进行了优化。主要的商业计算体系结构的普及有助于八位大小的普遍接受。[8]现代架构通常使用32位或64位字,由4或8个字节构成
全文可能值得一读。 50年前没有人开始摆摊,用拳头敲了敲桌子,说“一个字节不应该是8位”,但是随着时间的流逝,这种方式变得流行起来,流行的微处理器能够一次对8位进行操作。随后的处理器体系结构对此进行多次运算。虽然我确定Intel可以使他们的下一个芯片成为具有100bit能力的芯片,但我认为我们将遇到的下一个比特革命将是128
每个人都知道字节是8位吗?
这些天,是的
但是到底在哪里指定?
有关ISO代码,请参见上文
我的意思是,通常来说,您实际上并不使用字节,而是使用位。
从物理上讲,我们也不使用位,而是使用生锈的铝涂层板上可检测到的磁场强度阈值或电荷存储量
据我了解,它只是一个相当长的字符串,由1和0组成,而不是NOT字节。
是的,计算机上的所有数据都是很长的0和1。重要的是,定义其他任何东西都是在哪里停止对这组0或1进行计数,然后开始对下一组进行计数,以及您所说的组。一个字节是一组8位。为了方便起见,我们将事物分组。携带24罐啤酒回家比携带24罐啤酒的单个盒子要麻烦得多
当然有扇区,但是据我所知,是在软件级别进行编程的(至少我认为是在SSD中)
扇区和字节的相似之处在于它们表示某物的分组,但是它们不一定直接以位和字节的方式相关,因为扇区是字节顶部的分组级别。随着时间的推移,随着位置寻址以及后来甚至轮转存储的发展,扇区作为轨道的一部分(参考盘片编号和到盘片中心的距离)的含义随着时间的推移而发生了变化。在计算中,您通常会发现存在一个难以使用的基本级别,因此有人在其上构建了一个抽象级别,并且该抽象级别成为新的“难于使用”,因此一次又一次地对其进行抽象。
又是RAM,又是一长串的1和0
是的,因此很难使用,因此将其抽象后再进行抽象。您的程序本身并不关心提高存储芯片某个电容区域的电荷水平,它使用它可以访问的抽象,这种吸引力将使下一个水平下降,依此类推,直到魔术发生在底部。层次结构。在此下行旅程中停下来的地方主要是定义和任意选择的问题。我通常不认为我的ram芯片像是充满电子的冰块托盘或亚原子量子,但我可以。通常,当它不再对解决问题有用时,我们就会停止 问题
另一个例子是CPU。它一次不会处理8位,而只能处理一位。
这在很大程度上取决于您对“一次”的定义-这个问题的大部分与各种事物的定义有关。如果我们任意决定“一次”是多个皮秒的单位块,则cpu只需完成一个周期即可,那么,是的,CPU可以一次处理多个信息位-这就是拥有多个位CPU,可以将两个32位数字加在一起,并且不会忘记位。如果您想精确地缩短时间,以便我们确定有足够的电荷流到了这里,但没有到达那里,那么您可以说在此皮秒(或更短)秒内,CPU正在哪个位上运行,但是对于如此细粒度,因为在CPU等待的时间片结束之前什么都不会发生。 可以说,当我们划分时间刚好可以观察到从开始到结束的单个cpu周期时,我们可以说cpu在多个位上运行。
如果您每秒写一个字母,并且每三秒钟我闭上眼睛两次,那么我会看到您“同时”写了整个3个字母的单词-您写的是“猫坐在床上垫子”,然后对于观察者,您同时生成了每个单词。 由于类似的原因,CPU运行周期,它们在电荷的流动和积累上进行操作,您必须等待一定的时间才能积累电荷,以便触发下一组逻辑门来打开/关闭并引导电荷。在其他地方充电。更快的CPU基本上是更敏感的电路;电荷的流率相对恒定,这是您准备等待输入从此处流到那里的时间,以便该存储桶充满足够的电荷,随着MHz的增加而缩短。一旦积累了足够的电荷,就碰撞!事情发生了,并且“同时”处理了多件事
那么到底在哪里指定呢?还是仅仅是每个人都遵循的一般规则?
这是一般规则,然后进行指定以确保它继续作为一般规则
如果是这样,我是否可以使一个字节使用9位的系统(操作系统或更低级别的东西)?还是我不必?
您可以,但是从本质上讲,您必须编写对现有处理器体系结构的改编(摘要),并使用9个8位字节来实现8个9位字节的表示。您是在抽象之上创建一个抽象,并且基本构建基块的边界不对齐。您需要做很多工作才能使系统完整完成,而且您也不会打扰。
在现实世界中,如果冰块托盘一次可制造8个立方体,但您认为一个人要放入冰箱的最佳数量是9,则您要购买9个托盘,冷冻并制成72个立方体,然后将它们分成8袋,然后以这种方式出售。如果有人拿出价值9立方米的水(熔化了),则必须将其分成2个托盘,将其冷冻,然后退还。.行业间的这种持续适应提供了8个槽托盘和您希望处理9个托盘多维数据集是自适应抽象
如果您这样做,也许可以将其称为nyte? :)
也-为什么您不能使用少于一个字节的内存?或者也许可以?
您可以,您只需要处理现有抽象为8位的限制即可。如果您要存储8个布尔值,则可以编写代码,以便将字节的位打开和关闭,因此即使您卡在8立方冰格中,也可以有选择地填充和清空每个立方。如果您的程序只需要7个布尔值,则可能不得不接受另一位的浪费。或者,您可以将其与常规的32位整数结合使用,以跟踪33位整数值。但是,需要做很多工作,编写一种适应程序,它知道可以前进到第33位,而不是在您尝试将1加到4,294,967,295时仅抛出溢出错误。内存足够多,您会浪费该位,而使用64位整数来保存您的4,294,967,296值又浪费了31位。
通常,这些天的资源是如此丰富,以至于我们都不在乎浪费一点。当然,情况并非总是如此:以信用卡终端通过慢速线路发送数据。每一位都很重要,所以与银行交换信息的古老协议很可能会使用同一字节的不同位来编码多个事物
例如:两个应用程序是否可能使用相同的字节(例如,第一个使用4位,第二个使用其他4位)?
否,因为这些天的硬件和OS内存管理使程序分开,以确保安全性和稳定性。但是,在过去的日子里,一个程序可以写入另一个程序的内存(这是我们在游戏中作弊的方式,看到生命计数器下降,只是覆盖了一个新值),因此在那个日子里,如果两个程序可以运行,而一个程序只能写入4个高位,其他4个低位,则可以,它们可以共享一个字节。但是访问可能是整个字节,因此每个程序都必须读取整个字节,仅更改其自己的位,然后将整个结果写回
最后但并非最不重要的一点-计算机驱动器是否真的使用字节?还是例如1-8位属于某个事物,在它们旁边有3个随机位而12-20位属于不同的事物?
可能不是,但是您永远不会知道,因为您无法窥探到足够的抽象级别,无法将磁盘视为一系列位来布局,也不知道字节边界或扇区边界在哪里,并且该逻辑扇区是否跟随该逻辑扇区,或者磁盘表面是否有缺陷意味着这些扇区不会彼此跟随。不过,您通常并不在意,因为您将驱动器视为连续的字节数组(等),并让其控制器担心位在何处