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


96

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

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


13
Лучше избегать употребления термина «слово» из-за его двусмысленности. Или
уточните,

2
Выгодно ли иметь слово больше или меньше?

2
@ quest4knoledge более крупное слово позволяет использовать большие указатели (то есть больше ОЗУ) и позволяет быстро обрабатывать большие числа. Это также может позволить выполнять некоторые операции, такие как memset, быстрее, работая с большими блоками. Однако процессоры с большим словом требуют большего количества транзисторов в процессоре и могут потреблять немного больше энергии.
VoidStar

@VoidStar и большее слово означают меньшее адресное пространство, или я запутался?

1
Ответить на вопрос «какой смысл иметь байт» - это история. Процессоры изначально не были способны обрабатывать что-либо большее, чем «байт» (более ранние процессоры обрабатывали только полубайты (4 бита), но этот термин никогда не прижился). Первым процессором из всех заметных был Intel 8086/8088. Он был разработан для работы с инструкциями, построенными вокруг «байтов», поэтому мы до сих пор относимся к памяти в терминах xBytes, например GigaBytes, потому что базовой единицей адресуемой памяти был байт. 'K - это ссылка на килобайт, из которых на первых компьютерах было 16, с возможностью расширения до 64 - у-у-у!
Фред

Ответы:


176

Байт : сегодня байт почти всегда равен 8 битам. Однако так было не всегда, и не существует «стандарта» или чего-то, что бы это диктовало. Поскольку 8 бит - это удобное число для работы, оно стало стандартом де-факто.

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

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

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

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


9
Отличный ответ. Я бы только возразил: « Слово, напротив, - это самый большой кусок битов, с которым процессор может обрабатывать ... за раз ». Фактически, это наиболее распространенный фрагмент битов и т. Д. Многие архитектуры, которые развивались с течением времени, имеют размер слов, который не является их самым широким, но они часто ограничены в том, что они могут делать с самыми широкими значениями.
Росс Паттерсон

12
Для дополнительного кредита "полубайт" - это общий термин для обозначения полбайта. Он возник во время ранней эры микрокомпьютерных процессоров ( например , Intel 8080) и всегда понимался как 4-битный, потому что к тому времени байт стал 8-битным.
Росс Паттерсон

7
Сегодня 8-битный байт является стандартом; см. IEC 80000-13: 2008.
user2431763 02

1
@DebanjanDhar: Да, они не связаны. Единственное отношение состоит в том, что размер страницы (AFAIK) всегда кратен размеру слова.
DarkDust

4
x86 (как обычно) усложняет ситуацию: в терминологии Intel a wordравно 16 битам, даже на современных процессорах x86, где размер операнда по умолчанию составляет 32 бита (dword), а ширина целочисленного регистра - 64 бита (qword). И регистры xmm имеют ширину 128 бит ( movdqaперемещайте двойные квадраты). Шина памяти имеет ширину не менее 64 бита (и передает пакетами по 64 байта = строка кэша), а от исполнительной единицы к путям кеширования не менее 128 бит или 256 или даже 512 бит. Каким бы ни был собственный размер машинного слова современной x86, он не 16 бит, но современная x86 по-прежнему использует терминологию 8086.
Питер Кордес

16

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

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

  • экономия сил (она же лень) - проще сказать «байт», чем «восемь бит»

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

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


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


я думал, что октет был всего лишь французским переводом байта, спасибо;)
Abdelouahab Pp

8

БАЙТ

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

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

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

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

Если вы хотите проверить «количество битов» в вашей реализации C ++, проверьте файл «limits.h». В нем должна быть запись, как показано ниже.

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

СЛОВО

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

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

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


6

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

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


6

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

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


В каком-то смысле термин «байт» используется только для удобства?

Да, «байт» был особенно удобен, когда был изобретен термин. Как и многие условности, однажды они вступили в силу. Я не уверен, действительно ли байтовая терминология действительно делает компьютеры более понятными в целом, но это преобладающее соглашение, и вряд ли в ближайшее время изменится.
VoidStar

Байт - это термин, используемый для единицы, которая использовалась как символ в тексте. Исторически существовали байты размером от 6 до 9 бит.
starblue

@starblue, как это возможно, что символ занимает меньше места, чем слово?

1
@ quest4knoledge: потому что память хранится меньшими кусками, чем слова. Слово 32 бита (или 64 бита на новых машинах). В алгоритме, который обрабатывает отдельные символы 1 на 1, они ДЕЙСТВИТЕЛЬНО занимают все слово, только находясь внутри ЦП, а при помещении обратно в ОЗУ они упаковываются более плотно.
VoidStar

5

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

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

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


5

Кажется, все ответы предполагают языки высокого уровня и в основном 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")

3
Нет, эти размеры действительны только на 16-битной машине. Вы, вероятно, привыкли к программированию Windows, которое все еще использует эти макросы, поскольку это наследие 16-битных дней, и MS не потрудилась исправить это.
DarkDust

2
Кстати, так как размер слова (и действительно даже байты) может изменяться, ISO-C имеет int<X>_tи uint<X>_tтип (плюс более) , которые должны быть использованы , если вы хотите переменный / параметр определенного размера бита.
DarkDust

@DarkDust, мы говорим здесь об ассемблере. Стандарты C не актуальны. Кстати, я программирую сборку 1980 года, и использовались те же имена. (ну, может быть, кроме qword)
johnfound

Однако я нашел исключение: в GNU as это .wordможет быть 32 бита (например, для Sparc ).
DarkDust

Извините, AS не ассемблер. Это уродливый, калека, жалкий мутант, созданный с единственной целью - быть бэкендом для компиляторов HLL.
johnfound

3

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

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

Кроме того, вот несколько причин использовать байт (или октет 1 ) вместо «8 бит»:

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

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


2

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


Необычно да (мы это знаем. Пример: Texas instruments c54x Google texas instruments c54x byte. Ti.com/lit/ug/spru393/spru393.pdf «Инструкции 'C55x имеют переменную длину байта от 8 бит до 48 бит » stackoverflow.com/questions/2098149/…
barlop

1
Это совсем не оттуда. Этот термин был введен В. Бухгольцем в IBM в конце 1950-х годов. Источник: bobbemer.com/BYTE.HTM . По словам Боба Бемера, написание «байт» было выбрано вместо «укус», чтобы избежать путаницы (с «битом») из-за опечаток. Он бы знал. Он был здесь!
Стивен С

(Всего 30 лет? Вы всего лишь шутник. Я научился программировать в системах, где естественный размер «байта» не составлял 8 бит :-))
Стивен К.

1

Ссылка: https://www.os-book.com/OS9/slide-dir/PPT-dir/ch1.ppt

Базовая единица компьютерной памяти - бит. Бит может содержать одно из двух значений: 0 и 1. Все остальное хранилище на компьютере основано на наборах битов. Поразительно, сколько битов может представить компьютер: числа, буквы, изображения, фильмы, звуки, документы и программы, и это лишь некоторые из них. Байт составляет 8 бит, и на большинстве компьютеров это наименьший удобный фрагмент памяти. Например, у большинства компьютеров нет инструкции по перемещению бита, но есть инструкция по перемещению байта. Менее распространенным термином является слово, обозначающее родную единицу данных данной компьютерной архитектуры. Слово состоит из одного или нескольких байтов. Например, компьютер с 64-битными регистрами и 64-битной адресацией памяти обычно имеет 64-битные (8-байтовые) слова. Компьютер выполняет множество операций со своим размером слова, а не по байтам за раз. Компьютерное хранилище, наряду с пропускной способностью большинства компьютеров, она обычно измеряется и обрабатывается в байтах и ​​наборах байтов. Килобайт, или КБ, составляет 1024 байта на мегабайт, или МБ, это 1024 2 байта на гигабайт, или ГБ, это 1024 3 байта на терабайт, или ТБ, это 1024 4 байта на петабайт, или ПБ, это 1024 5 байтов Компьютер производители часто округляют эти числа и говорят, что мегабайт - это 1 миллион байтов, а гигабайт - это 1 миллиард байтов. Сетевые измерения являются исключением из этого общего правила; они даны в битах (поскольку сети перемещают данные понемногу) 024 5 байтов Производители компьютеров часто округляют эти числа и говорят, что мегабайт - это 1 миллион байтов, а гигабайт - это 1 миллиард байтов. Сетевые измерения являются исключением из этого общего правила; они даны в битах (потому что сети перемещают данные понемногу) 024 5 байтов Производители компьютеров часто округляют эти числа и говорят, что мегабайт - это 1 миллион байтов, а гигабайт - это 1 миллиард байтов. Сетевые измерения являются исключением из этого общего правила; они даны в битах (поскольку сети перемещают данные понемногу)


-1

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


Ага. Минимальная адресуемая единица памяти в TMS320C54xx (одном из DSP Texas Instruments) имеет длину 16 бит, что также является наименьшим размером регистров общего назначения. И компилятор TI C определяет на нем char = short = int = 16 бит.
Алексей Фрунзе

Нет, большинство RISC-машин имеют 32-битные слова, но могут адресовать одиночные байты. Например, на MIPS это word определенно означает 32 бита, но есть lbинструкция (загрузить байт), которая загружает 8 бит.
Питер Кордес

-1

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

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

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


7
Группа из 8 бит называется октетом.
cnicutar

2
правильно: термин octetбыл определен для явного обозначения последовательности из 8 бит из-за неоднозначности, связанной с термином байт . Но звук мне больше нравится byte:)
tolitius

2
@tolitius: +1 за «Но мне нравится звук byteлучше»: я сильно подозреваю, что вы не одиноки в этом и безопасны для нескольких нишевых систем, «путаница» байта, возможно, имеет размер, отличный от 8-битного в наши дни уже не актуален.
Joachim Sauer

-1

Термины БАЙТ и СЛОВО относятся к размеру процессора, о котором идет речь. Наиболее распространенными процессорами являются 8-битные, 16-битные, 32-битные или 64-битные. Это длины СЛОВ процессора. Фактически половина СЛОВА - это БАЙТ, независимо от числовой длины. Готовы к этому, половина БАЙТА - это НИББЛ.


Нет, в процессорах с 32-битными словами и 8-битными байтами (например, MIPS или ARM) половина слова составляет 2 байта.
Питер Кордес

-3

Фактически, в обычном использовании слово стало синонимом 16 бит, так же как байт имеет 8 бит. Это может немного сбить с толку, поскольку «размер слова» на 32-битном ЦП составляет 32 бита, но когда мы говорим о слове данных, это будет означать 16 бит. Микроконтроллеры с 32-битным размером слова стали называть свои инструкции «длинными» (предположительно, чтобы избежать путаницы между словом и двойным словом).


1
Это полностью зависит от типа процессора. Как вы заметили, на 32-битных машинах, отличных от IA32, слово обычно составляет 32 байта.
Росс Паттерсон

2
@RossPatterson Это полностью зависит от того, разрабатываете ли вы программное обеспечение или обедаете.
Engineer

ARM / MIPS / другие популярные архитектуры RISC имеют 32-битные слова. Это ширина регистра (в 32-битной версии этих ISA) и ширина инструкции. 16 бит - это полуслова, поэтому инструкции ARM любятldrh загружать 16 бит и расширять их нулями в 32-битный регистр. Или ldrshзагрузить и продлить по знаку 16 бит.
Питер Кордес
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.