单词和字节有什么区别?



我做了一些调查。一个字节是8位,一个字是可以在内存上寻址的最小单位。单词的确切长度是不同的。我不明白的是有一个字节有什么意义?为什么不说8位呢?

我问了一位教授这个问题,他说现在大多数机器都是字节可寻址的,但这将构成一个词吗?

Byte:今天,一个字节几乎总是8位。然而,情况并非总是如此,也没有"标准"。或者其他决定这个的东西。因为8位是一个方便的数字,所以它成为了事实上的标准。

Word:处理器处理数据的自然大小(寄存器大小)。目前最常见的字长是8位、16位、32位和64位,但也可能有其他的字长。例如,有一些36位的机器,甚至是12位的机器。

字节是CPU最小的可寻址单元。如果你想设置/清除单个位,你首先需要从内存中取出相应的字节,打乱这些位,然后把字节写回内存。

相比之下,word的一个定义是处理器一次可以进行处理(如加法和减法)的最大比特块——通常是整数寄存器的宽度。这个定义有点模糊,因为有些处理器对于不同的任务可能有不同的寄存器大小(例如整数处理和浮点处理),或者能够访问寄存器的部分。字长是多数操作所使用的最大寄存器大小。

也有一些处理器有不同的指针大小:例如,8086是16位处理器,这意味着它的寄存器是16位宽。但是它的指针(地址)是20位宽的,并且是由两个16位寄存器以某种方式组合而成的。


在一些手册和api中,术语"word"可能是"卡住了"当平台发展到支持更大的寄存器大小时,以前的遗留大小和可能与处理器当前的实际字长不同。例如,Intel和AMD的x86手册仍然使用";表示16位,DWORD(双字,32位)和QWORD(四字,64位)作为更大的尺寸。这反映在一些api中,比如微软的WinAPI。

我不明白的是有一个字节的意义是什么?为什么不说8位呢?

从历史的角度来看,除了一个字节不一定是8位这一技术观点外,使用术语的原因很简单:

  • 省力(也就是懒惰)——说"字节"更容易而不是"八位"

  • 部落主义——一群人喜欢使用行话/一种私人语言来区分他们。

随波逐流。你不能通过抱怨来改变50多年来积累的IT术语和文化包袱。


当你的意思是"独立于硬件架构的8位"时,这是一个技术上正确的术语。八隅体。

字节

我试着从c++的角度来回答这个问题。

c++标准将"字节"定义为"可寻址的数据单位,其大小足以容纳执行环境的基本字符集的任何成员。"

这意味着字节至少由足够的相邻位组成,以容纳实现的基本字符集。也就是说,可能值的数量必须等于或超过不同字符的数量。在美国,基本字符集通常是ASCII和EBCDIC字符集,每个字符集可以容纳8位。因此,可以保证每个字节至少有8位。

换句话说,一个字节是存储单个字符所需的内存量。

如果你想在c++实现中验证' number of bits ',检查文件' limits.h '。它应该有如下所示的条目:

#define CHAR_BIT      8         /* number of bits in a char */
<<p> 词/strong>

一个字被定义为机器/系统可以一起处理(即一次尝试)的特定位数。或者,我们可以说Word定义了在单个操作中可以在CPU和RAM之间传输的数据量。

计算机中的硬件寄存器是字大小的。Word大小还定义了可能的最大内存地址(每个内存地址指向一个字节大小的内存)。

注意-在c++程序中,内存地址指向内存的一个字节,而不是一个字。

似乎所有的答案都假设是高级语言,主要是C/c++。

但是这个问题被标记为"汇编",并且在我知道的所有汇编器中(对于8位,16位,32位和64位cpu),定义要清楚得多:

byte  = 8 bits 
word  = 2 bytes
dword = 4 bytes = 2Words (dword means "double word")
qword = 8 bytes = 2Dwords = 4Words ("quadruple word")

为什么不说8位呢?

因为不是所有的机器都有8位字节。由于您标记了此C,请在limits.h中查找CHAR_BIT

一个字是处理器中寄存器的大小。这意味着像add, mul等处理器指令都是单词大小的输入。

但是大多数现代体系结构都有可在8位块中寻址的内存,所以使用"字节"这个词很方便。

在这里,字是机器处理内存时使用的单位。例如,在32位机器上,单词是32位长,在64位机器上是64位长。字长决定地址空间

在编程(C/c++)中,这个词通常用int_ptr类型表示,它与指针的长度相同,这样就抽象了这些细节。

有些API可能会让你感到困惑,比如Win32 API,因为它有WORD(16位)和DWORD(32位)这样的类型。原因是API最初针对16位机器,然后移植到32位机器,然后移植到64位机器。要存储指针,可以使用INT_PTR。更多细节在这里和这里。

一个单词的确切长度是不同的。我不明白的是有一个字节有什么意义?为什么不说8位呢?

即使一个字的长度是不同的,在所有现代机器上,甚至在我所熟悉的所有旧架构上,字的大小仍然是字节大小的倍数。所以使用& byte&quot并没有什么特别的缺点;超过"8位";关于可变字长

除此之外,这里有一些使用字节(或八位1)而不是"8位"的原因:
  1. 更大的单位只是为了方便避免非常大或非常小的数字:你不妨问"为什么说3纳秒,而不是说0.000000003秒";或者"明明可以说1000克,为什么要说1公斤"等等
  2. 除了方便之外,字节的单位在某种程度上与1 一样基本,因为许多操作通常不是在位级别工作,而是在字节级别:寻址内存,分配动态存储,从文件或套接字读取等等。
  3. 即使你采用"8位"作为一种单元,你可以说两个8位的;如果你的新单位以一个数字开头,而不是"两个字节",通常会让人很困惑。例如,如果有人说"一百个8位";它可以很容易地被解释为108位,而不是800位( 100个8位是100乘以8位)。

1虽然我认为这个答案是8位,但这并不是普遍正确的:在旧机器上字节可能有不同的大小(例如6位)。Octet总是表示8位,与机器无关(所以这个术语经常用于定义网络协议)。在现代用法中,字节被压倒性地用作8位的同义词。

一组8位被称为字节(对于某些体系结构,它不是:)

是一组固定大小的位,由处理器的指令集和/或硬件作为一个单元来处理。这意味着通用寄存器的大小(通常大于一个字节)是一个字

在C语言中,一个字通常被称为整数=> int

无论数据表和编译器中的术语是什么,一个'Byte'是8位。让我们不要试图将询问者和一般性与更模糊的例外混淆,特别是"Byte"这个词来自短语"By Eight"。我在半导体/电子行业工作了30多年,从来没有听说过"Byte"用来表示超过8位的东西。

参考:https://www.os-book.com/OS9/slide-dir/PPT-dir/ch1.ppt

计算机存储的基本单位是位。一个比特可以包含两个中的一个取值为0和1。计算机中的所有其他存储都是基于位的集合。如果有足够的比特,计算机可以表现的东西之多是惊人的:数字、字母、图像、电影、声音、文档和程序,来命名几。一个字节是8位,在大多数计算机上,这是最小的方便存储块。例如,大多数计算机没有指令来移动一个位,但确实有一个移动一个字节。一个不太常见的术语是word,它是给定计算机体系结构的本地数据单位。一个词是造出来的一个或多个字节的。例如,一台具有64位寄存器和64-的计算机位内存寻址通常有64位(8字节)字。计算机执行许多操作以其原生字大小而不是一次一个字节。通常测量计算机存储以及大多数计算机吞吐量并以字节和字节集合的形式进行操作。1千字节(KB)等于1024字节1兆字节(MB)等于10242字节1gb等于10243字节1 TB等于1024字节1拍字节(PB)是1,0245字节计算机制造商通常将这些数字四舍五入,称其为a兆字节是100万字节,千兆字节是10亿字节。网络测量是这个一般规则的一个例外;它们是以位表示的(因为网络每次移动数据位)

如果一台机器是字节可寻址的,一个字是可以在内存上寻址的最小单位,那么我猜一个字将是一个字节!

BYTE和WORD的术语是相对于所引用的处理器的大小而言的。最常见的处理器是8位、16位、32位或64位。这些是处理器的WORD长度。实际上,一个WORD的一半是一个BYTE,不管它的数值长度是多少。准备好了,一个字节的一半是NIBBLE。

事实上,在常用用法中,word已经成为16位的同义词,就像byte与8位的同义词一样。由于32位CPU上的"字长"是32位,这可能会让人有点困惑,但当谈到一个字的数据时,人们会指的是16位。具有32位字长的微控制器已经开始将其指令称为"long"(据说是为了避免单词/双单词混淆)。