字和字节有什么区别?

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

我问过一个教授这个问题,他说现在大多数机器都是字节可寻址的,但是那样会产生一个单词吗?

196641 次浏览

If a machine is byte-addressable and a word is the smallest unit that can be addressed on memory then I guess a word would be a byte!

为什么不说8比特?

因为并非所有机器都有8位字节。既然您标记了这个 C,那么在 limits.h中查找 CHAR_BIT

字是处理器中寄存器的大小。这意味着诸如 add、 mul 等处理器指令都是字大小的输入。

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

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

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

在 C 语言中,一个单词是 大多数时候,称为整数 = > int

在这种情况下,单词是机器在处理内存时使用的单位。例如,在32位机器上,单词是32位长,而在64位机器上,单词是64位长。单词大小决定地址空间。

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

Some APIs might confuse you though, such as Win32 API, because it has types such as WORD (16 bits) and DWORD (32 bits). The reason is that the API was initially targeting 16 bit machines, then was ported to 32 bit machines, then to 64 bit machines. To store a pointer, you can use INT_PTR. More details 给你 and 给你.

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

Apart from the technical point that a byte isn't necessarily 8 bits, the reasons for having a term is simple human nature:

  • 经济的努力(又名懒惰)-它是 更容易说“字节”而不是“八位”

  • 部落主义-群体的人喜欢使用行话/私人语言,使他们有别于其他人。

顺其自然。你不能通过抱怨来改变50多年来累积的 IT 术语和文化包袱。


FWIW-当你说“独立于硬件架构的8位”时,正确的术语应该是“八位元”。

Byte : 今天,一个字节几乎总是8位。然而,那个 并不总是如此并没有“标准”或者什么东西来规定这个。由于8位是一个方便使用的数字,因此它成为了行业标准。

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

The 字节 is the smallest addressable unit for a CPU. If you want to set/clear single bits, you first need to fetch the corresponding byte from memory, mess with the bits and then write the byte back to memory.

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

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


在一些手册和 API 中,术语 “字”可能“卡在”以前的遗留大小上,并且当平台发展到支持更大的寄存器大小时,它可能与实际的、当前的处理器字大小不同。例如,Intel 和 AMD x86手册仍然使用 "word" to mean 16 bitsDWORD(双字,32位)以及 QWORD(四字,64位)作为更大的尺寸。这反映在一些 API 中,比如微软的 WinAPI。

事实上,在通常的用法中,word 已经成为16位的同义词,就像 byte 与8位的同义词一样。因为32位 CPU 上的“单词大小”是32位的,所以可能会有点混淆,但是当谈到一个单词的数据时,一个单词的意思是16位。单词大小为32位的微控制器已经开始将其指令称为“ longs”(据说是为了避免单词/双词混淆)。

BYTE

我试图从 C + + 的角度来回答这个问题。

C + + 标准将“ byte”定义为“足以容纳执行环境的基本字符集的任何成员的可寻址数据单元”

这意味着字节至少由足够的相邻位组成,以容纳实现所需的基本字符集。也就是说,可能的值的数目必须等于或超过不同字符的数目。 In the United States, the basic character sets are usually the ASCII and EBCDIC sets, each of which can be accommodated by 8 bits. 因此可以保证一个字节至少有8位。

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

如果您想要验证 C + + 实现中的“位数”,请检查文件“ limit s.h”。它应该有一个条目,如下。

#define CHAR_BIT      8         /* number of bits in a char */

一言为定

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

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

注意——在 C + + 程序中,内存地址指向一个内存字节,而不是一个单词。

无论数据表和编译器中使用什么术语,“ Byte”都是8位。让我们不要试图混淆询问者和概括性与更模糊的例外,特别是当单词“字节”来自表达“八”。我在半导体/电子行业工作了30多年,从未听说过“ Byte”用来表示任何超过8位的东西。

似乎所有的答案都假定使用高级语言,主要是 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")

The terms of BYTE and WORD are relative to the size of the processor that is being referred to. The most common processors are/were 8 bit, 16 bit, 32 bit or 64 bit. These are the WORD lengths of the processor. Actually half of a WORD is a BYTE, whatever the numerical length is. Ready for this, half of a BYTE is a NIBBLE.

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

即使一个字的长度不同,在所有现代机器上,甚至在我所熟悉的所有较老的架构上,字的大小仍然是字节大小的倍数。因此,在“8位”上使用“ byte”对于可变的单词大小没有什么特别的不利之处。

除此之外,还有一些使用 byte (或 octet1)超过“8位”的原因:

  1. 较大的单位只是方便避免非常大或非常小的数字: 你可以问“为什么说3纳秒时,你可以说0.000000003秒”或“为什么说1千克时,你可以说1000克”,等等。
  2. 除了方便之外,字节的单元在某种程度上和1 bit一样基本,因为许多操作通常不是在字节级工作,而是在字节级: 寻址内存,分配动态存储,从文件或套接字读取,等等。
  3. 即使你采用“8位”作为一种单位,所以你可以说“两个8位”而不是“两个字节”,它往往是非常混乱,让你的新单位开始一个数字。例如,如果有人说“108位”,它很容易被解释为108位,而不是100位。

尽管我认为这个答案的字节为8位,但这并不是普遍正确的: 在较老的机器上,字节可能有不同的大小(例如 6比特)。八重奏总是表示8位,不管机器是什么(因此这个术语常用于定义网络协议)。在现代使用中,字节绝大多数被用作8位的同义词。

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

计算机存储的基本单位是位。位可以包含两者之一 计算机中的所有其他存储都基于位的集合。 Given enough bits, it is amazing how many things a computer can represent: 数字、字母、图像、电影、声音、文档和程序等等 a few. A byte is 8 bits, and on most computers it is the smallest convenient chunk of storage. For example, most computers don’t have an instruction to 移动一点,但有一个字节移动一个字节。一个不太常见的术语是字, 它是一个给定的计算机体系结构的本地数据单元 一个或多个字节。例如,一台计算机有64位寄存器和64- bit memory addressing typically has 64-bit (8-byte) words. A computer executes 许多操作在其本机字大小,而不是一次一个字节。 计算机存储以及大多数计算机吞吐量通常都是测量的 以字节和字节集合的形式进行操作。 千字节(KB)是1,024字节 兆字节(MB)为1,0242字节 GB 是1,0243个字节 TB 为1,0244字节 PB 是1,0245字节 计算机制造商经常四舍五入这些数字,然后说 兆字节是100万字节,千兆字节是10亿字节 测量是这个一般规则的一个例外; 它们是以位给出的 (because networks move data a bit at a time)