В чем разница между словом и байтом?


Я провел некоторые исследования. Байт-это 8 бит, а слово-Самая маленькая единица, которая может быть адресована в памяти. Точная длина слова варьируется. То, что я не понимаю, в чем смысл иметь байт? Почему бы не сказать 8 бит?

Я задал профу этот вопрос, и он сказал, что большинство машин в наши дни являются байт-адресуемыми, но что бы это сделало слово?

14 66

14 ответов:

байт: сегодня, байт почти всегда 8 бит. Впрочем, что не всегда и нет никакого" стандарта " или чего-то, что диктует это. Так как 8 бит-это удобное число для работы с ним стало стандартом де-факто.

Word: The естественный размер, с которым процессор обрабатывает данные (размер регистра). Наиболее распространенные размеры слов встречаются сегодня 8, 16, 32 и 64 бит, но другие размеры вероятный. Например, было несколько 36 бит машины, или даже 12-разрядной машины.

The байт является наименьшим адресуемым блоком для процессора. Если вы хотите установить / очистить отдельные биты, вам сначала нужно извлечь соответствующий байт из памяти, возиться с битами, а затем записать байт обратно в память.

The word напротив самый большой кусок битов с которыми процессор может сделать обработку (как добавление и вычитание) за один раз. Это определение немного нечеткое, так как некоторые процессоры могут иметь разные размеры слов для разных задач (например, целочисленная обработка и обработка с плавающей запятой). Размер слова-это то, что большинство операций работы С.

есть также несколько процессоров, которые имеют разные указатель размер: например, 8086-это 16-разрядный процессор, что означает, что его регистры имеют ширину 16 бит. Но его указатели (адреса) 20 бит и были вычислены путем объединения двух 16-битных регистров определенным образом.

то, что я не понимаю, какой смысл иметь байт? Почему бы не сказать 8 бит?

помимо технического момента, что байт не обязательно 8 бит, причины наличия термина-простая человеческая природа:

  • экономия усилий (ака лень) - это легче говорить "байт", а не "восемь бит"

  • трайбализм-группы людей любят использовать жаргон / частный язык для установки они отдельно от других.

просто плывите по течению. Вы не собираетесь менять 50+ лет накопленной терминологии и культурного багажа, жалуясь на это.


FWIW-правильный термин для использования, когда вы имеете в виду "8 бит, независимых от аппаратной архитектуры" является "октет".

байт

Я пытаюсь ответить на этот вопрос с точки зрения с++.

стандарт C++ определяет 'byte' как " Адресуемую единицу данных, достаточно большую, чтобы содержать любой элемент базового набора символов среды выполнения."

это означает, что байт состоит по крайней мере из достаточного количества соседних битов для размещения базового набора символов для реализации. То есть количество возможных значений должно быть равно или превышать количество различных символов. В Соединенных Штатах основными наборами символов обычно являются наборы ASCII и EBCDIC, каждый из которых может быть размещен на 8 бит. Следовательно, гарантируется, что байт будет иметь не менее 8 бит.

другими словами, байт-это объем памяти, необходимый для хранения одного символа.

Если вы хотите проверить "количество бит" в вашей реализации C++, проверьте ограничения файла.ч.’ Он должен иметь запись, как под.

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

слово

слово определяется как определенное количество битов, которые могут быть обработаны вместе (т. е. с одной попытки) машиной/системой. В качестве альтернативы можно сказать, что Word определяет объем данных, которые могут быть переданы между процессором и ОЗУ в одной операции.

аппаратные регистры в компьютерной машине имеют размер слова. Размер слова также определяет максимально возможный адрес памяти (каждый адрес памяти указывает на a память размером с байт).

Примечание-в программах C++ адреса памяти указывают на байт памяти, а не на слово.

Почему бы не сказать 8 бит?

потому что не все машины имеют 8-битный байт. Так как вы пометили это C, посмотри CHAR_BIT in limits.h.

слова-это размер регистров в процессоре. Это означает, что инструкции процессора, такие как add, mul и т. д., находятся на входах размером со слово.

но большинство современных архитектур имеют память, которая адресуется в 8-битных кусках, поэтому удобно использовать слово "байт".

в этом контексте слово-это группа, которую машина использует при работе с памятью. Например, на 32-разрядной машине слово имеет длину 32 бита, а на 64-разрядной-64 бита. Размер слова определяет адресное пространство.

в программировании (C/C++) слово обычно представлено int_ptr тип, который имеет ту же длину, что и указатель, таким образом абстрагируя эти детали.

некоторые API могут вас смутить, например Win32 API, потому что у него есть такие типы как WORD (16 бит) и DWORD (32 бита). Причина в том, что API изначально был нацелен на 16-битные машины, затем был портирован на 32-битные машины, а затем на 64-битные машины. Для хранения указателя можно использовать INT_PTR. Более подробная информация здесь и здесь.

похоже, что все ответы предполагают языки высокого уровня и в основном C/C++.

но вопрос помечен как "сборка" и во всех ассемблерах, которые я знаю (для 8-битных, 16-битных, 32-битных и 64-битных процессоров), определения гораздо более ясны:

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

независимо от терминологии, присутствующей в таблицах данных и компиляторах, "байт" - это восемь битов. Давайте не будем путать запросы и обобщения с более неясными исключениями, тем более что слово "байт"происходит от выражения "на восемь". Я работаю в полупроводниковой / электронной промышленности более тридцати лет и ни разу не знал, что "байт" используется для выражения чего-то большего, чем восемь бит.

также хороший способ подумать об этом. Конечно, это зависит от архитектуры компьютера.

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 бит?

несмотря на то, что длина слова варьируется, на всех современных машинах и даже на всех старых архитектурах, с которыми я знаком, размер слова по-прежнему кратен размеру байта. Таким образом, нет особого недостатка в использовании "байта" над "8 битами" по отношению к переменному размеру слова.

кроме того, вот несколько причин для используйте байт (или октет1) за "8 бит":

  1. большие единицы просто удобны, чтобы избежать очень больших или очень маленьких чисел: вы можете также спросить: "почему говорят 3 наносекунды, когда вы могли бы сказать 0,000000003 секунды" или "почему говорят 1 килограмм, когда вы могли бы сказать 1,000 граммов" и т. д.
  2. помимо удобства, блок a байт как-то так же фундаментально, как 1 немного так как многие операции обычно работают не на байтовом уровне, а на уровне байт: адресация памяти распределение оперативной памяти, чтение из файла или сокета, и т. д.
  3. даже если вы должны были принять "8 бит "в качестве типа единицы, так что вы могли бы сказать" два 8-бит "вместо" два байта", это часто было бы очень запутанным, чтобы ваш новый блок начинался с числа. Например, если кто-то сказал "сто 8-бит", это можно легко интерпретировать как 108 бит, а не 100 бит.

1 хотя я рассмотрим байт, чтобы быть 8 бит для этого ответа, это не универсально верно: на старых машинах a байт может иметь другой размер (например,6 бит. октет всегда означает 8 бит, независимо от машины (поэтому этот термин часто используется при определении сетевых протоколов). В современном использовании байт в подавляющем большинстве используется как синоним 8 бит.

Если машина является байт-адресуемым и слово является наименьшей единицей, которая может быть адресована в памяти, то я думаю, что слово будет байтом!

группа из 8 бит называется байт ( за исключением случая, когда это не так :) для некоторых архитектур )

A слово представляет собой группу битов фиксированного размера, которые обрабатываются как единое целое набором команд и / или аппаратным обеспечением процессора. Это означает, что размер регистра общего назначения (который обычно больше байта) - это слово

в C, слово чаще всего называется целое число => int

термины BYTE и WORD относятся к размеру процессора, на который ссылаются. Наиболее распространенные процессоры были 8 бит, 16 бит, 32 бит или 64 бит. Это длины слов процессора. На самом деле половина слова-это байт, независимо от числовой длины. Готов к этому, половина байта-это клев.

на самом деле, в общем использовании, слово стало синонимом 16 бит, так же, как байт имеет с 8 битами. Может немного запутаться, так как" размер слова " на 32-битном процессоре составляет 32 бита, но когда речь идет о слове данных, это будет означать 16 бит. Микроконтроллеры с 32-битным размером слова стали называть свои инструкции "longs" (предположительно, чтобы попытаться избежать путаницы со словом/двойным словом).