字和字节有什么区别?
我做了一些研究。 一个字节是8位,一个字是可以在存储器上寻址的最小单位。 一个字的确切长度是变化的。 我不明白的是有一个字节是什么意思? 为什么不说8位?
我问了一个教授这个问题,他说现在大多数机器都是可以字节寻址的,但是这会产生什么呢?
字节 :今天,一个字节几乎总是8位。 然而, 情况并非总是如此 ,没有“标准”或者是什么要求。 由于8位是一个方便的数字,它成为事实上的标准。
字 : 处理器处理数据的自然大小 (寄存器大小)。 目前遇到的最常见的字长是8,16,32和64位,但是其他尺寸是可能的。 例如,有几个36位的机器 ,甚至是12位的机器 。
该字节是CPU的最小可寻址单元。 如果你想设置/清除单个位,你首先需要从内存中获取相应的字节,混淆这些位,然后把这个字节写回到内存。
这个字相比之下是处理器一次可以处理的最大块(比如加法和减法)。 这个定义有些模糊,因为某些处理器可能针对不同的任务具有不同的字大小(例如整数与浮点处理)。 字的大小是大多数操作的工作。
也有一些处理器有不同的指针大小:例如,8086是一个16位处理器,这意味着它的寄存器是16位宽。 但是它的指针(地址)是20位宽,并且通过以某种方式组合两个16位寄存器来计算。
我不明白的是有一个字节是什么意思? 为什么不说8位?
除了字节不一定是8位的技术要点之外,有一个术语的原因是简单的人性:
-
努力的经济(又名懒惰) – 说“字节”而不是“八位”比较容易
-
部落主义 – 一群人喜欢用行话/私人语言来区别他人。
只是顺其自然。 抱怨不会改变50年以上的IT术语和文化包袱。
FWIW – 当您的意思是“8位独立于硬件架构”时使用的正确术语是“八位字节”。
一个字是处理器中寄存器的大小。 这意味着处理器指令,如add,mul等是在字大小的input。
但是大多数现代体系结构都有可以在8位块中寻址的内存,因此使用“字节”这个词很方便。
字节
我想从C ++的angular度来回答这个问题。
C ++标准将“字节”定义为“足以容纳执行环境的基本字符集的任何成员的可寻址数据单元”。
这意味着该字节至less包含足够的相邻位,以适应实现的基本字符集。 也就是说,可能值的数量必须等于或超过不同字符的数量。 在美国,基本字符集通常是ASCII和EBCDIC集合,每个集合可以容纳8位。 因此保证一个字节至less有8位。
换句话说,一个字节是存储单个字符所需的内存量。
如果你想validation你的C ++实现中的“位数”,检查文件“limits.h”。 它应该有一个像下面的条目。
#define CHAR_BIT 8 /* number of bits in a char */
字
字被定义为可以由机器/系统一起处理(即一次尝试)的特定位数。 或者,我们可以说,Word定义了可以在一个操作中在CPU和RAM之间传输的数据量。
计算机中的硬件寄存器是字大小的。 字的大小也定义了最大可能的内存地址(每个内存地址指向一个字节大小的内存)。
注 – 在C ++程序中,内存地址指向一个字节的内存而不是一个字。
在这种情况下,单词是机器在使用内存时使用的单位。 例如,在一个32位的机器上,该字长32位,64位长64位。 字大小决定了地址空间。
在编程(C / C ++)中,单词通常由int_ptr
types表示,它与指针的长度相同,这样可以抽象出这些细节。
有些API可能会让你感到困惑,比如Win32 API,因为它有WORD
(16位)和DWORD
(32位)等types。 原因是该API最初是针对16位机器,然后被移植到32位机器,然后到64位机器。 要存储指针,可以使用INT_PTR
。 更多细节在这里和这里 。
看起来所有的答案都假设高级语言,主要是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
。
无论数据表和编译器中的术语如何,“字节”都是八位。 我们不要试图将查询者和普遍性混淆在比较模糊的例外中,特别是“Byte”这个词来自“八个”这个词。 我在半导体/电子行业工作了三十多年,以前并不知道“字节”用于expression超过八位的数据。
也是考虑它的好方法。 当然这取决于计算机体系结构。
bit = …1 bit… nybble = 4 bits = 1/2 byte byte = 8 bits = 2 nybbles WORD = 2 bytes = 4 nybbles = 16 bits DWORD = 2 WORDs = 4 bytes = 8 nybbles = 32 bits QWORD = 2 DWORDs = 4 WORDs = ... = 64 bits
如果一台机器是可以字节寻址的,而且一个字是可以在内存中寻址的最小单元,那么我猜一个字就是一个字节!
一组8位被称为一个字节 (除了某些体系结构不是这样的情况)
一个字是固定大小的一组比特,由处理器的指令集和/或硬件作为一个单元进行处理。 这意味着通用寄存器(通常多于一个字节)的大小是一个字
在C中,一个单词通常被称为整数=> int
实际上,在通常的用法中,单词已经成为16位的同义词,就像字节与8位一样。 由于32位CPU上的“字大小”是32位的,所以可能会有点混淆,但是当谈到一个数据字时,则意味着16位。 具有32位字长的微控制器已经习惯于调用他们的指令“longs”(据说试图避免单词/双字混淆)。