2015-09-10 4 views
9

Байт состоит из 8 бит на большинстве систем.Почему байты существуют? Почему бы нам просто не использовать биты?

Байт обычно представляет наименьший тип данных, который может использовать программист. В зависимости от языка типы данных могут называться char или byte.

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

Почему этот минимум использования 8 бит для хранения данных существует? Почему нам даже нужны байты? Почему компьютеры не используют приращения бит (1 или более бит), а не приращения байтов (кратные 8 бит)?

На всякий случай кто-нибудь спрашивает: я не беспокоюсь об этом. У меня нет особых потребностей. Мне просто интересно.

+1

Некоторые сист ms используют другие размеры байтов вместо 8 бит –

+0

@ M.M True. Но большинство современных систем используют 8 из того, что я понимаю. Независимо от числа, используемого в какой-либо конкретной системе, мой вопрос остается: в чем причина байт? –

+0

Представьте себе жизнь без абстракции. – paddy

ответ

4

потому что на аппаратном уровне память естественно организована в адресные фрагменты. Маленькие куски означают, что у вас могут быть мелкозернистые вещи, такие как 4-битные числа; большие куски обеспечивают более эффективную работу (как правило, процессор перемещает вещи вокруг «кусков» или их нескольких). В частности, более крупные адресуемые блоки делают большие адресные пространства. Если у меня есть куски, которые 1 бит, то диапазон адресов от 1 до 500 охватывает только 500 бит, тогда как 500 8-битных фрагментов охватывают 4000 бит.

Примечание - это не всегда 8 бит. Я работал на машине, которая мыслила в 6 бит. (хороший старый восьмеричный)

1

На мой взгляд, это проблема адресации. Чтобы получить доступ к отдельным битам данных, вам понадобится в восемь раз больше адресов (добавив 3 бита к каждому адресу) по сравнению с доступом к отдельным байтам. Байт, как правило, будет самым маленьким практическим подразделением для хранения номера в программе (всего 256 возможных значений).

+0

Спасибо за ответ. Мне интересно: имеет ли в 8 раз больше адресов проблемы? –

+0

@TomDworzanski Я думаю, что 8-битный натуральный размер. Потому что 4-бит не может даже содержать английский алфавит. Это совсем не полезно. И 16-бит слишком большой для некоторых манипуляций с данными, например. текстовые данные. – cshu

+1

@TomDworzanski, как я объяснил, но сформулировал плохо, имея в 8 раз больше адресов, требуется 3 дополнительных бита данных в адресе, чтобы определить, какой бит выбран. В целом, это было бы ужасно неэффективно, особенно учитывая, что биты сами по себе почти бесполезны. Представьте себе планирование города, где каждое здание имеет восемь комнат, и каждый номер имеет уникальный адрес.Если вы хотите идентифицировать здания в целом, в каждом здании имеется семь ненужных адресов. Это аналогичный сценарий. – sneelhorses

0

Хороший способ написать что-нибудь поздно ночью!

Ваши баллы совершенно верны, однако история всегда будет тем безумным злоумышленником, как бы разрушила ваши планы задолго до вашего рождения.

В целях пояснения давайте представим себе фиктивную машину с архитектурой имени Bitel (TM) Inside или что-то подобное. Спецификации Bitel требуют, чтобы центральный процессор (процессор, т. Е. Микропроцессор) получал доступ к памяти в однобитовых единицах. Предположим, что данный экземпляр Bitel - работающий компьютер имеет блок памяти, вмещающий 32 миллиарда бит (наш фиктивный эквивалент блока памяти 4 ГБ).

Теперь, давайте посмотрим, почему Бител, Inc. попал в банкротстве:

  • двоичный код любой данная программа будет гигантский (компилятор должен манипулировать каждый один бит!)
  • 32-разрядные адреса будут (даже больше) ограничены для хранения всего 512 МБ памяти. 64-битные системы были бы безопасны (на данный момент ...)
  • Доступ к памяти будет буквально заторможен.Когда у процессора есть все эти 48 бит, ему нужно обработать одну инструкцию ADD, дискета уже была бы продолжена слишком долго, и вы знаете, что произойдет дальше ...
  • Кто такой **** действительно необходимо оптимизировать один бит ? (См. Предыдущее обоснование банкротства).
  • Если вам нужно обрабатывать отдельные биты, научитесь использовать bitwise operators!
  • Программисты сошли с ума, как и кофе и оперативная память становятся слишком дорогими. На данный момент это идеальный синоним апокалипсиса.
  • Стандарт C является святым и священным, и он устанавливает, что минимальный адресуемый блок (то есть char) должен быть не менее шириной 8 бит.
  • 8 - совершенная сила 2. (1 является еще один, но Мех ...)
0

Прежде всего, C и C++ действительно имеют встроенную поддержку bit-fields.

#include <iostream> 
struct S { 
    // will usually occupy 2 bytes: 
    // 3 bits: value of b1 
    // 2 bits: unused 
    // 6 bits: value of b2 
    // 2 bits: value of b3 
    // 3 bits: unused 
    unsigned char b1 : 3, : 2, b2 : 6, b3 : 2; 
}; 
int main() 
{ 
    std::cout << sizeof(S) << '\n'; // usually prints 2 
} 

Вероятно, ответ кроется в производительности и памяти выравнивания, а также тот факт, что (я думаю, отчасти потому, что byte называется char в C) байт является наименьшая часть машинного слова, которое может держать 7-битный ASCII. Текстовые операции являются общими, поэтому особый тип для обычного текста имеет выигрыш для языка программирования.

0

Некоторые процессоры используют слова для адресной памяти вместо байтов. Это их естественный тип данных, поэтому 16 или 32 бит. Если бы процессоры Intel сделали это, это было бы 64 бита.

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

И, если что-то происходит достаточно долго, становится очень трудно изменить. Именно поэтому ваш жесткий диск или SSD, вероятно, все еще претендуют на использование 512-байтовых блоков. Несмотря на то, что дисковое оборудование не использует 512-байтовый блок, и ОС также не работает. (У дисков расширенного формата есть программный коммутатор для отключения эмуляции 512 байт, но обычно только серверы с RAID-контроллерами отключают его.)

Кроме того, процессоры Intel/AMD имеют так много дополнительного кремния, что делает так много дополнительной работы декодирования, что небольшая разница в 8-битной и 64-разрядной адресации не добавляет заметных накладных расходов. Контроллер памяти процессора, разумеется, не использует 8 бит. Он тянет данные в кеш в длинных потоках, а минимальный размер - это линия кэша, часто 64 байта или 512 бит. Часто аппаратное обеспечение RAM медленно запускается, но быстро в потоке, поэтому процессор считывает килобайты в кеш-память третьего уровня, подобно тому, как жесткие диски считывают целую дорожку в свои кэши, потому что головка диска уже существует, так почему бы и нет?

2

Бумажная лента (~ 1950-е годы) была 5 или 6 отверстий (бит) шириной, может быть, другой ширины. Перфокартами (более новый вид) были 12 рядов по 80 столбцов.

1960-е годы:
B-5000 - 48-бит "слова" с 6-битовых символов
CDC-6600 - 60-битные слова с 6-битовых символов
IBM 7090 - 36-разрядных слов с 6-битные символы
Были 12-битные машины; и т.д.

Получить изображение?Американцы полагали, что символы могут храниться всего в 6 бит.
Тогда мы обнаружили, что в мире было больше, чем просто английском.
Таким образом, мы столкнулись с 7-битным ascii и 8-битным EBCDIC.

В конце концов мы решили, что 8 бит были достаточно хороши для всех персонажей, которые нам когда-либо понадобились. («Мы» не были китайцами.)

IBM-360 вышел как доминирующая машина в 60-х-70-х годах; он был основан на 8-битном байте. (У него было 32-битные слова, но это стало менее важным, чем все-могучий байт.

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

IBM, в середине 20-го века, «принадлежала» компьютеру с 70% продаж аппаратного и программного обеспечения. Поскольку 360 являлись их основной машиной, 8-битные байты были для всех конкурентов копией .

в конце концов мы поняли, что существовали и другие языки и придумали Unicode/UTF8 и его варианты. Но это уже совсем другая история.

Смежные вопросы