В 1 байте: Чему равен 1 Байт, Килобайт, Мегабайт, Гигабайт и Террабайт

Содержание

байт [Б] в бит [б] • Конвертер единиц измерения количества информации • Популярные конвертеры единиц • Компактный калькулятор • Онлайн-конвертеры единиц измерения

Конвертер длины и расстоянияКонвертер массыКонвертер мер объема сыпучих продуктов и продуктов питанияКонвертер площадиКонвертер объема и единиц измерения в кулинарных рецептахКонвертер температурыКонвертер давления, механического напряжения, модуля ЮнгаКонвертер энергии и работыКонвертер мощностиКонвертер силыКонвертер времениКонвертер линейной скоростиПлоский уголКонвертер тепловой эффективности и топливной экономичностиКонвертер чисел в различных системах счисления.Конвертер единиц измерения количества информацииКурсы валютРазмеры женской одежды и обувиРазмеры мужской одежды и обувиКонвертер угловой скорости и частоты вращенияКонвертер ускоренияКонвертер углового ускоренияКонвертер плотностиКонвертер удельного объемаКонвертер момента инерцииКонвертер момента силыКонвертер вращающего моментаКонвертер удельной теплоты сгорания (по массе)Конвертер плотности энергии и удельной теплоты сгорания топлива (по объему)Конвертер разности температурКонвертер коэффициента теплового расширенияКонвертер термического сопротивленияКонвертер удельной теплопроводностиКонвертер удельной теплоёмкостиКонвертер энергетической экспозиции и мощности теплового излученияКонвертер плотности теплового потокаКонвертер коэффициента теплоотдачиКонвертер объёмного расходаКонвертер массового расходаКонвертер молярного расходаКонвертер плотности потока массыКонвертер молярной концентрацииКонвертер массовой концентрации в раствореКонвертер динамической (абсолютной) вязкостиКонвертер кинематической вязкостиКонвертер поверхностного натяженияКонвертер паропроницаемостиКонвертер плотности потока водяного параКонвертер уровня звукаКонвертер чувствительности микрофоновКонвертер уровня звукового давления (SPL)Конвертер уровня звукового давления с возможностью выбора опорного давленияКонвертер яркостиКонвертер силы светаКонвертер освещённостиКонвертер разрешения в компьютерной графикеКонвертер частоты и длины волныОптическая сила в диоптриях и фокусное расстояниеОптическая сила в диоптриях и увеличение линзы (×)Конвертер электрического зарядаКонвертер линейной плотности зарядаКонвертер поверхностной плотности зарядаКонвертер объемной плотности зарядаКонвертер электрического токаКонвертер линейной плотности токаКонвертер поверхностной плотности токаКонвертер напряжённости электрического поляКонвертер электростатического потенциала и напряженияКонвертер электрического сопротивленияКонвертер удельного электрического сопротивленияКонвертер электрической проводимостиКонвертер удельной электрической проводимостиЭлектрическая емкостьКонвертер индуктивностиКонвертер Американского калибра проводовУровни в dBm (дБм или дБмВт), dBV (дБВ), ваттах и др. единицахКонвертер магнитодвижущей силыКонвертер напряженности магнитного поляКонвертер магнитного потокаКонвертер магнитной индукцииРадиация. Конвертер мощности поглощенной дозы ионизирующего излученияРадиоактивность. Конвертер радиоактивного распадаРадиация. Конвертер экспозиционной дозыРадиация. Конвертер поглощённой дозыКонвертер десятичных приставокПередача данныхКонвертер единиц типографики и обработки изображенийКонвертер единиц измерения объема лесоматериаловВычисление молярной массыПериодическая система химических элементов Д. И. Менделеева

Числа в двоичной системе

Общие сведения

Данные и их хранение необходимы для работы компьютеров и цифровой техники. Данные — это любая информация, от команд до файлов, созданных пользователями, например текст или видео. Данные могут храниться в разных форматах, но чаще всего их сохраняют как двоичный код. Некоторые данные хранятся временно и используются только во время исполнения определенных операций, а потом удаляются. Их записывают на устройствах временного хранения информации, например, в оперативной памяти, известной под названием запоминающего устройства с произвольным доступом (по-английски, RAM — Random Access Memory) или ОЗУ — оперативное запоминающее устройство. Некоторую информацию хранят дольше. Устройства, обеспечивающие более длительное хранение — это жесткие диски, твердотельные накопители, и различные внешние накопители.

Подробнее о данных

Данные представляют собой информацию, которая хранится в символьной форме и может быть считана компьютером или человеком. Бо́льшая часть данных, предназначенных для компьютерного доступа, хранится в файлах. Некоторые из этих файлов — исполняемые, то есть они содержат программы. Файлы с программами обычно не считают данными.

Избыточный массив независимых дисков RAID.

Избыточность

Во избежание потери данных при поломках используют принцип избыточности, то есть хранят копии данных в разных местах. Если эти данные перестанут читаться в одном месте, то их можно будет считать в другом. На этом принципе основывается работа избыточного массива независимых дисков RAID (от английского reduntant array of independent discs). В нем копии данных хранятся на двух или более дисках, объединенных в один логический блок. В некоторых случаях для большей надежности копируют сам RAID-массив. Копии иногда хранят отдельно от основного массива, иногда в другом городе или даже в другой стране, на случай уничтожения массива во время катаклизмов, катастроф, или войн.

Форматы хранения данных

Иерархия хранения данных

Данные обрабатываются в центральном процессоре, и чем ближе к процессору устройство, которое их хранит, тем быстрее их можно обработать. Скорость обработки данных также зависит от вида устройства, на котором они хранятся. Пространство внутри компьютера рядом с микропроцессором, где можно установить такие устройства, ограничено, и обычно самые быстрые, но маленькие устройства находятся ближе всего к микропроцессору, а те, что больше но медленнее — дальше от него. Например, регистр внутри процессора очень мал, но позволяет считывать данные со скоростью одного цикла процессора, то есть, в течение нескольких миллиардных долей секунды. Эти скорости с каждым годом улучшаются.

Карта памяти

Первичная память

Первичная память включает память внутри процессора — кэш и регистры. Это — самая быстрая память, то есть время доступа к ней — самое низкое. Оперативная память также считается первичной памятью. Она намного медленнее регистров, но ее емкость гораздо больше. Процессор имеет к ней прямой доступ. В оперативную память записываются текущие данные, постоянно используемые для работы выполняемых программ.

Вторичная память

Устройства вторичной памяти, например накопитель на жестких магнитных дисках (НЖМД) или винчестер, находятся внутри компьютера. На них хранятся данные, которые не так часто используются. Они хранятся дольше, и не удаляются автоматически. В основном их удаляют сами пользователи или программы. Доступ к этим данным происходит медленнее, чем к данным в первичной памяти.

Внешняя память

Внешнюю память иногда включают во вторичную память, а иногда — относят в отдельную категорию памяти. Внешняя память — это сменные носители, например оптические (CD, DVD и Blu-ray), Flash-память, магнитные ленты и бумажные носители информации, такие как перфокарты и перфоленты. Оператору необходимо вручную вставлять такие носители в считывающие устройства. Эти носители сравнительно дешевы по сравнению с другими видами памяти и их часто используют для хранения резервных копий и для обмена информацией из рук в руки между пользователями.

Третичная память

Третичная память включает в себя запоминающие устройства большого объема. Доступ к данным на таких устройствах происходит очень медленно. Обычно они используются для архивации информации в специальных библиотеках. По запросу пользователей механическая «рука» находит и помещает в считывающее устройство носитель с запрошенными данными. Носители в такой библиотеке могут быть разные, например оптические или магнитные.

Виды носителей

Привод DVD

Оптические носители

Информацию с оптических носителей считывают в оптическом приводе с помощью лазера. Во время написания этой статьи (весна 2013 года) самые распространенные оптические носители — оптические диски CD, DVD, Blu-ray и Ultra Density Optical (UDO). Накопитель может быть один, или их может быть несколько, объединенных в одном устройстве, как например в оптических библиотеках. Некоторые оптические диски позволяют осуществлять повторную запись.

Полупроводниковый накопитель

Полупроводниковые носители

Полупроводниковая память — одна из наиболее часто используемых видов памяти. Это вид памяти параллельного действия, позволяющий одновременный доступ к любым данным, независимо в какой последовательности эти данные были записаны.

Почти все первичные устройства памяти, а также устройства флеш-памяти — полупроводниковые. В последнее время в качестве альтернативы жестким дискам становятся более популярными твердотельные накопители SSD (от английского solid-state drives). Во время написания этой статьи эти накопители стоили намного дороже жестких дисков, но скорость записи и считывания информации на них значительно выше. При падениях и ударах они повреждаются намного меньше, чем магнитные жесткие диски, и работают практически безшумно. Кроме высокой цены, твердотельные накопители, по сравнению с магнитными жесткими дисками, со временем начинают работать хуже, и потерянные данные на них очень сложно восстановить, по сравнению с жесткими дисками. Гибридные жесткие диски совмещают твердотельный накопитель и магнитный жесткий диск, увеличивая тем самым скорость и срок эксплуатации, и уменьшая цену, по сравнению с твердотельными накопителями.

Накопитель на жестких магнитных дисках

Магнитные носители

Поверхности для записи на магнитных носителях намагничиваются в определенной последовательности. Магнитная головка считывает и записывает на них данные. Примерами магнитных носителей являются накопители на жестких магнитных дисках и дискеты, которые уже почти полностью вышли из употребления. Аудио и видео также можно хранить на магнитных носителях — кассетах. Пластиковые карты часто хранят информацию на магнитных полосах. Это могут быть дебетовые и кредитные карты, карты-ключи в гостиницах, водительские права, и так далее. В последнее время в некоторые карты встраивают микросхемы. Такие карты обычно содержат микропроцессор и могут выполнять криптографические вычисления. Их называют смарт-картами.

Перфокарта для ткацкого станка

Бумажные носители

Перфокарта и USB-флеш-накопитель

До появления магнитных и других носителей данные хранили на бумаге. Обычно в таком виде были записаны машинные команды, и их могли читать как люди, так и машины, например компьютеры или ткацкие станки. В основном для этих целей использовали перфокарты и перфоленты, где информация хранилась в виде чередующихся отверстий, и отсутствия отверстий. Перфоленту использовали, чтобы записывать текст на телеграфе и в типографии или редакции газет, а также в кассовых аппаратах. Постепенно с конца 50-x и до конца 80-х их заменили магнитные носители. Сейчас бумажные носители используют для подсчета голосов на выборах и для автоматической проверки контрольных работ, ответы к которым записываются на специальную карту, а потом читаются компьютером.

Литература

Автор статьи: Kateryna Yuri

Вы затрудняетесь в переводе единицы измерения с одного языка на другой? Коллеги готовы вам помочь. Опубликуйте вопрос в TCTerms и в течение нескольких минут вы получите ответ.

байт [Б] в символ • Конвертер единиц измерения количества информации • Популярные конвертеры единиц • Компактный калькулятор • Онлайн-конвертеры единиц измерения

Конвертер длины и расстоянияКонвертер массыКонвертер мер объема сыпучих продуктов и продуктов питанияКонвертер площадиКонвертер объема и единиц измерения в кулинарных рецептахКонвертер температурыКонвертер давления, механического напряжения, модуля ЮнгаКонвертер энергии и работыКонвертер мощностиКонвертер силыКонвертер времениКонвертер линейной скоростиПлоский уголКонвертер тепловой эффективности и топливной экономичностиКонвертер чисел в различных системах счисления.Конвертер единиц измерения количества информацииКурсы валютРазмеры женской одежды и обувиРазмеры мужской одежды и обувиКонвертер угловой скорости и частоты вращенияКонвертер ускоренияКонвертер углового ускоренияКонвертер плотностиКонвертер удельного объемаКонвертер момента инерцииКонвертер момента силыКонвертер вращающего моментаКонвертер удельной теплоты сгорания (по массе)Конвертер плотности энергии и удельной теплоты сгорания топлива (по объему)Конвертер разности температурКонвертер коэффициента теплового расширенияКонвертер термического сопротивленияКонвертер удельной теплопроводностиКонвертер удельной теплоёмкостиКонвертер энергетической экспозиции и мощности теплового излученияКонвертер плотности теплового потокаКонвертер коэффициента теплоотдачиКонвертер объёмного расходаКонвертер массового расходаКонвертер молярного расходаКонвертер плотности потока массыКонвертер молярной концентрацииКонвертер массовой концентрации в раствореКонвертер динамической (абсолютной) вязкостиКонвертер кинематической вязкостиКонвертер поверхностного натяженияКонвертер паропроницаемостиКонвертер плотности потока водяного параКонвертер уровня звукаКонвертер чувствительности микрофоновКонвертер уровня звукового давления (SPL)Конвертер уровня звукового давления с возможностью выбора опорного давленияКонвертер яркостиКонвертер силы светаКонвертер освещённостиКонвертер разрешения в компьютерной графикеКонвертер частоты и длины волныОптическая сила в диоптриях и фокусное расстояниеОптическая сила в диоптриях и увеличение линзы (×)Конвертер электрического зарядаКонвертер линейной плотности зарядаКонвертер поверхностной плотности зарядаКонвертер объемной плотности зарядаКонвертер электрического токаКонвертер линейной плотности токаКонвертер поверхностной плотности токаКонвертер напряжённости электрического поляКонвертер электростатического потенциала и напряженияКонвертер электрического сопротивленияКонвертер удельного электрического сопротивленияКонвертер электрической проводимостиКонвертер удельной электрической проводимостиЭлектрическая емкостьКонвертер индуктивностиКонвертер Американского калибра проводовУровни в dBm (дБм или дБмВт), dBV (дБВ), ваттах и др. единицахКонвертер магнитодвижущей силыКонвертер напряженности магнитного поляКонвертер магнитного потокаКонвертер магнитной индукцииРадиация. Конвертер мощности поглощенной дозы ионизирующего излученияРадиоактивность. Конвертер радиоактивного распадаРадиация. Конвертер экспозиционной дозыРадиация. Конвертер поглощённой дозыКонвертер десятичных приставокПередача данныхКонвертер единиц типографики и обработки изображенийКонвертер единиц измерения объема лесоматериаловВычисление молярной массыПериодическая система химических элементов Д. И. Менделеева

Числа в двоичной системе

Общие сведения

Данные и их хранение необходимы для работы компьютеров и цифровой техники. Данные — это любая информация, от команд до файлов, созданных пользователями, например текст или видео. Данные могут храниться в разных форматах, но чаще всего их сохраняют как двоичный код. Некоторые данные хранятся временно и используются только во время исполнения определенных операций, а потом удаляются. Их записывают на устройствах временного хранения информации, например, в оперативной памяти, известной под названием запоминающего устройства с произвольным доступом (по-английски, RAM — Random Access Memory) или ОЗУ — оперативное запоминающее устройство. Некоторую информацию хранят дольше. Устройства, обеспечивающие более длительное хранение — это жесткие диски, твердотельные накопители, и различные внешние накопители.

Подробнее о данных

Данные представляют собой информацию, которая хранится в символьной форме и может быть считана компьютером или человеком. Бо́льшая часть данных, предназначенных для компьютерного доступа, хранится в файлах. Некоторые из этих файлов — исполняемые, то есть они содержат программы. Файлы с программами обычно не считают данными.

Избыточный массив независимых дисков RAID.

Избыточность

Во избежание потери данных при поломках используют принцип избыточности, то есть хранят копии данных в разных местах. Если эти данные перестанут читаться в одном месте, то их можно будет считать в другом. На этом принципе основывается работа избыточного массива независимых дисков RAID (от английского reduntant array of independent discs). В нем копии данных хранятся на двух или более дисках, объединенных в один логический блок. В некоторых случаях для большей надежности копируют сам RAID-массив. Копии иногда хранят отдельно от основного массива, иногда в другом городе или даже в другой стране, на случай уничтожения массива во время катаклизмов, катастроф, или войн.

Форматы хранения данных

Иерархия хранения данных

Данные обрабатываются в центральном процессоре, и чем ближе к процессору устройство, которое их хранит, тем быстрее их можно обработать. Скорость обработки данных также зависит от вида устройства, на котором они хранятся. Пространство внутри компьютера рядом с микропроцессором, где можно установить такие устройства, ограничено, и обычно самые быстрые, но маленькие устройства находятся ближе всего к микропроцессору, а те, что больше но медленнее — дальше от него. Например, регистр внутри процессора очень мал, но позволяет считывать данные со скоростью одного цикла процессора, то есть, в течение нескольких миллиардных долей секунды. Эти скорости с каждым годом улучшаются.

Карта памяти

Первичная память

Первичная память включает память внутри процессора — кэш и регистры. Это — самая быстрая память, то есть время доступа к ней — самое низкое. Оперативная память также считается первичной памятью. Она намного медленнее регистров, но ее емкость гораздо больше. Процессор имеет к ней прямой доступ. В оперативную память записываются текущие данные, постоянно используемые для работы выполняемых программ.

Вторичная память

Устройства вторичной памяти, например накопитель на жестких магнитных дисках (НЖМД) или винчестер, находятся внутри компьютера. На них хранятся данные, которые не так часто используются. Они хранятся дольше, и не удаляются автоматически. В основном их удаляют сами пользователи или программы. Доступ к этим данным происходит медленнее, чем к данным в первичной памяти.

Внешняя память

Внешнюю память иногда включают во вторичную память, а иногда — относят в отдельную категорию памяти. Внешняя память — это сменные носители, например оптические (CD, DVD и Blu-ray), Flash-память, магнитные ленты и бумажные носители информации, такие как перфокарты и перфоленты. Оператору необходимо вручную вставлять такие носители в считывающие устройства. Эти носители сравнительно дешевы по сравнению с другими видами памяти и их часто используют для хранения резервных копий и для обмена информацией из рук в руки между пользователями.

Третичная память

Третичная память включает в себя запоминающие устройства большого объема. Доступ к данным на таких устройствах происходит очень медленно. Обычно они используются для архивации информации в специальных библиотеках. По запросу пользователей механическая «рука» находит и помещает в считывающее устройство носитель с запрошенными данными. Носители в такой библиотеке могут быть разные, например оптические или магнитные.

Виды носителей

Привод DVD

Оптические носители

Информацию с оптических носителей считывают в оптическом приводе с помощью лазера. Во время написания этой статьи (весна 2013 года) самые распространенные оптические носители — оптические диски CD, DVD, Blu-ray и Ultra Density Optical (UDO). Накопитель может быть один, или их может быть несколько, объединенных в одном устройстве, как например в оптических библиотеках. Некоторые оптические диски позволяют осуществлять повторную запись.

Полупроводниковый накопитель

Полупроводниковые носители

Полупроводниковая память — одна из наиболее часто используемых видов памяти. Это вид памяти параллельного действия, позволяющий одновременный доступ к любым данным, независимо в какой последовательности эти данные были записаны.

Почти все первичные устройства памяти, а также устройства флеш-памяти — полупроводниковые. В последнее время в качестве альтернативы жестким дискам становятся более популярными твердотельные накопители SSD (от английского solid-state drives). Во время написания этой статьи эти накопители стоили намного дороже жестких дисков, но скорость записи и считывания информации на них значительно выше. При падениях и ударах они повреждаются намного меньше, чем магнитные жесткие диски, и работают практически безшумно. Кроме высокой цены, твердотельные накопители, по сравнению с магнитными жесткими дисками, со временем начинают работать хуже, и потерянные данные на них очень сложно восстановить, по сравнению с жесткими дисками. Гибридные жесткие диски совмещают твердотельный накопитель и магнитный жесткий диск, увеличивая тем самым скорость и срок эксплуатации, и уменьшая цену, по сравнению с твердотельными накопителями.

Накопитель на жестких магнитных дисках

Магнитные носители

Поверхности для записи на магнитных носителях намагничиваются в определенной последовательности. Магнитная головка считывает и записывает на них данные. Примерами магнитных носителей являются накопители на жестких магнитных дисках и дискеты, которые уже почти полностью вышли из употребления. Аудио и видео также можно хранить на магнитных носителях — кассетах. Пластиковые карты часто хранят информацию на магнитных полосах. Это могут быть дебетовые и кредитные карты, карты-ключи в гостиницах, водительские права, и так далее. В последнее время в некоторые карты встраивают микросхемы. Такие карты обычно содержат микропроцессор и могут выполнять криптографические вычисления. Их называют смарт-картами.

Перфокарта для ткацкого станка

Бумажные носители

Перфокарта и USB-флеш-накопитель

До появления магнитных и других носителей данные хранили на бумаге. Обычно в таком виде были записаны машинные команды, и их могли читать как люди, так и машины, например компьютеры или ткацкие станки. В основном для этих целей использовали перфокарты и перфоленты, где информация хранилась в виде чередующихся отверстий, и отсутствия отверстий. Перфоленту использовали, чтобы записывать текст на телеграфе и в типографии или редакции газет, а также в кассовых аппаратах. Постепенно с конца 50-x и до конца 80-х их заменили магнитные носители. Сейчас бумажные носители используют для подсчета голосов на выборах и для автоматической проверки контрольных работ, ответы к которым записываются на специальную карту, а потом читаются компьютером.

Литература

Автор статьи: Kateryna Yuri

Вы затрудняетесь в переводе единицы измерения с одного языка на другой? Коллеги готовы вам помочь. Опубликуйте вопрос в TCTerms и в течение нескольких минут вы получите ответ.

байт [Б] в мегабайт (10⁶ байт) [МБ] • Конвертер единиц измерения количества информации • Популярные конвертеры единиц • Компактный калькулятор • Онлайн-конвертеры единиц измерения

Конвертер длины и расстоянияКонвертер массыКонвертер мер объема сыпучих продуктов и продуктов питанияКонвертер площадиКонвертер объема и единиц измерения в кулинарных рецептахКонвертер температурыКонвертер давления, механического напряжения, модуля ЮнгаКонвертер энергии и работыКонвертер мощностиКонвертер силыКонвертер времениКонвертер линейной скоростиПлоский уголКонвертер тепловой эффективности и топливной экономичностиКонвертер чисел в различных системах счисления.Конвертер единиц измерения количества информацииКурсы валютРазмеры женской одежды и обувиРазмеры мужской одежды и обувиКонвертер угловой скорости и частоты вращенияКонвертер ускоренияКонвертер углового ускоренияКонвертер плотностиКонвертер удельного объемаКонвертер момента инерцииКонвертер момента силыКонвертер вращающего моментаКонвертер удельной теплоты сгорания (по массе)Конвертер плотности энергии и удельной теплоты сгорания топлива (по объему)Конвертер разности температурКонвертер коэффициента теплового расширенияКонвертер термического сопротивленияКонвертер удельной теплопроводностиКонвертер удельной теплоёмкостиКонвертер энергетической экспозиции и мощности теплового излученияКонвертер плотности теплового потокаКонвертер коэффициента теплоотдачиКонвертер объёмного расходаКонвертер массового расходаКонвертер молярного расходаКонвертер плотности потока массыКонвертер молярной концентрацииКонвертер массовой концентрации в раствореКонвертер динамической (абсолютной) вязкостиКонвертер кинематической вязкостиКонвертер поверхностного натяженияКонвертер паропроницаемостиКонвертер плотности потока водяного параКонвертер уровня звукаКонвертер чувствительности микрофоновКонвертер уровня звукового давления (SPL)Конвертер уровня звукового давления с возможностью выбора опорного давленияКонвертер яркостиКонвертер силы светаКонвертер освещённостиКонвертер разрешения в компьютерной графикеКонвертер частоты и длины волныОптическая сила в диоптриях и фокусное расстояниеОптическая сила в диоптриях и увеличение линзы (×)Конвертер электрического зарядаКонвертер линейной плотности зарядаКонвертер поверхностной плотности зарядаКонвертер объемной плотности зарядаКонвертер электрического токаКонвертер линейной плотности токаКонвертер поверхностной плотности токаКонвертер напряжённости электрического поляКонвертер электростатического потенциала и напряженияКонвертер электрического сопротивленияКонвертер удельного электрического сопротивленияКонвертер электрической проводимостиКонвертер удельной электрической проводимостиЭлектрическая емкостьКонвертер индуктивностиКонвертер Американского калибра проводовУровни в dBm (дБм или дБмВт), dBV (дБВ), ваттах и др. единицахКонвертер магнитодвижущей силыКонвертер напряженности магнитного поляКонвертер магнитного потокаКонвертер магнитной индукцииРадиация. Конвертер мощности поглощенной дозы ионизирующего излученияРадиоактивность. Конвертер радиоактивного распадаРадиация. Конвертер экспозиционной дозыРадиация. Конвертер поглощённой дозыКонвертер десятичных приставокПередача данныхКонвертер единиц типографики и обработки изображенийКонвертер единиц измерения объема лесоматериаловВычисление молярной массыПериодическая система химических элементов Д. И. Менделеева

Числа в двоичной системе

Общие сведения

Данные и их хранение необходимы для работы компьютеров и цифровой техники. Данные — это любая информация, от команд до файлов, созданных пользователями, например текст или видео. Данные могут храниться в разных форматах, но чаще всего их сохраняют как двоичный код. Некоторые данные хранятся временно и используются только во время исполнения определенных операций, а потом удаляются. Их записывают на устройствах временного хранения информации, например, в оперативной памяти, известной под названием запоминающего устройства с произвольным доступом (по-английски, RAM — Random Access Memory) или ОЗУ — оперативное запоминающее устройство. Некоторую информацию хранят дольше. Устройства, обеспечивающие более длительное хранение — это жесткие диски, твердотельные накопители, и различные внешние накопители.

Подробнее о данных

Данные представляют собой информацию, которая хранится в символьной форме и может быть считана компьютером или человеком. Бо́льшая часть данных, предназначенных для компьютерного доступа, хранится в файлах. Некоторые из этих файлов — исполняемые, то есть они содержат программы. Файлы с программами обычно не считают данными.

Избыточный массив независимых дисков RAID.

Избыточность

Во избежание потери данных при поломках используют принцип избыточности, то есть хранят копии данных в разных местах. Если эти данные перестанут читаться в одном месте, то их можно будет считать в другом. На этом принципе основывается работа избыточного массива независимых дисков RAID (от английского reduntant array of independent discs). В нем копии данных хранятся на двух или более дисках, объединенных в один логический блок. В некоторых случаях для большей надежности копируют сам RAID-массив. Копии иногда хранят отдельно от основного массива, иногда в другом городе или даже в другой стране, на случай уничтожения массива во время катаклизмов, катастроф, или войн.

Форматы хранения данных

Иерархия хранения данных

Данные обрабатываются в центральном процессоре, и чем ближе к процессору устройство, которое их хранит, тем быстрее их можно обработать. Скорость обработки данных также зависит от вида устройства, на котором они хранятся. Пространство внутри компьютера рядом с микропроцессором, где можно установить такие устройства, ограничено, и обычно самые быстрые, но маленькие устройства находятся ближе всего к микропроцессору, а те, что больше но медленнее — дальше от него. Например, регистр внутри процессора очень мал, но позволяет считывать данные со скоростью одного цикла процессора, то есть, в течение нескольких миллиардных долей секунды. Эти скорости с каждым годом улучшаются.

Карта памяти

Первичная память

Первичная память включает память внутри процессора — кэш и регистры. Это — самая быстрая память, то есть время доступа к ней — самое низкое. Оперативная память также считается первичной памятью. Она намного медленнее регистров, но ее емкость гораздо больше. Процессор имеет к ней прямой доступ. В оперативную память записываются текущие данные, постоянно используемые для работы выполняемых программ.

Вторичная память

Устройства вторичной памяти, например накопитель на жестких магнитных дисках (НЖМД) или винчестер, находятся внутри компьютера. На них хранятся данные, которые не так часто используются. Они хранятся дольше, и не удаляются автоматически. В основном их удаляют сами пользователи или программы. Доступ к этим данным происходит медленнее, чем к данным в первичной памяти.

Внешняя память

Внешнюю память иногда включают во вторичную память, а иногда — относят в отдельную категорию памяти. Внешняя память — это сменные носители, например оптические (CD, DVD и Blu-ray), Flash-память, магнитные ленты и бумажные носители информации, такие как перфокарты и перфоленты. Оператору необходимо вручную вставлять такие носители в считывающие устройства. Эти носители сравнительно дешевы по сравнению с другими видами памяти и их часто используют для хранения резервных копий и для обмена информацией из рук в руки между пользователями.

Третичная память

Третичная память включает в себя запоминающие устройства большого объема. Доступ к данным на таких устройствах происходит очень медленно. Обычно они используются для архивации информации в специальных библиотеках. По запросу пользователей механическая «рука» находит и помещает в считывающее устройство носитель с запрошенными данными. Носители в такой библиотеке могут быть разные, например оптические или магнитные.

Виды носителей

Привод DVD

Оптические носители

Информацию с оптических носителей считывают в оптическом приводе с помощью лазера. Во время написания этой статьи (весна 2013 года) самые распространенные оптические носители — оптические диски CD, DVD, Blu-ray и Ultra Density Optical (UDO). Накопитель может быть один, или их может быть несколько, объединенных в одном устройстве, как например в оптических библиотеках. Некоторые оптические диски позволяют осуществлять повторную запись.

Полупроводниковый накопитель

Полупроводниковые носители

Полупроводниковая память — одна из наиболее часто используемых видов памяти. Это вид памяти параллельного действия, позволяющий одновременный доступ к любым данным, независимо в какой последовательности эти данные были записаны.

Почти все первичные устройства памяти, а также устройства флеш-памяти — полупроводниковые. В последнее время в качестве альтернативы жестким дискам становятся более популярными твердотельные накопители SSD (от английского solid-state drives). Во время написания этой статьи эти накопители стоили намного дороже жестких дисков, но скорость записи и считывания информации на них значительно выше. При падениях и ударах они повреждаются намного меньше, чем магнитные жесткие диски, и работают практически безшумно. Кроме высокой цены, твердотельные накопители, по сравнению с магнитными жесткими дисками, со временем начинают работать хуже, и потерянные данные на них очень сложно восстановить, по сравнению с жесткими дисками. Гибридные жесткие диски совмещают твердотельный накопитель и магнитный жесткий диск, увеличивая тем самым скорость и срок эксплуатации, и уменьшая цену, по сравнению с твердотельными накопителями.

Накопитель на жестких магнитных дисках

Магнитные носители

Поверхности для записи на магнитных носителях намагничиваются в определенной последовательности. Магнитная головка считывает и записывает на них данные. Примерами магнитных носителей являются накопители на жестких магнитных дисках и дискеты, которые уже почти полностью вышли из употребления. Аудио и видео также можно хранить на магнитных носителях — кассетах. Пластиковые карты часто хранят информацию на магнитных полосах. Это могут быть дебетовые и кредитные карты, карты-ключи в гостиницах, водительские права, и так далее. В последнее время в некоторые карты встраивают микросхемы. Такие карты обычно содержат микропроцессор и могут выполнять криптографические вычисления. Их называют смарт-картами.

Перфокарта для ткацкого станка

Бумажные носители

Перфокарта и USB-флеш-накопитель

До появления магнитных и других носителей данные хранили на бумаге. Обычно в таком виде были записаны машинные команды, и их могли читать как люди, так и машины, например компьютеры или ткацкие станки. В основном для этих целей использовали перфокарты и перфоленты, где информация хранилась в виде чередующихся отверстий, и отсутствия отверстий. Перфоленту использовали, чтобы записывать текст на телеграфе и в типографии или редакции газет, а также в кассовых аппаратах. Постепенно с конца 50-x и до конца 80-х их заменили магнитные носители. Сейчас бумажные носители используют для подсчета голосов на выборах и для автоматической проверки контрольных работ, ответы к которым записываются на специальную карту, а потом читаются компьютером.

Литература

Автор статьи: Kateryna Yuri

Вы затрудняетесь в переводе единицы измерения с одного языка на другой? Коллеги готовы вам помочь. Опубликуйте вопрос в TCTerms и в течение нескольких минут вы получите ответ.

Сколько символов в 1 байте

Информационный объем текста складывается из информационных весов составляющих его символов.

Современный компьютер может обрабатывать числовую, текстовую, графическую, звуковую и видео информацию. Все эти виды информации в компьютере представлены в двоичном коде, т. е. используется всего два символа 0 и 1. Связано это с тем, что удобно представлять информацию в виде последовательности электрических импульсов: импульс отсутствует (0), импульс есть (1).

Такое кодирование принято называть двоичным, а сами логические последовательности нулей и единиц – машинным языком.

Какой длины должен быть двоичный код, чтобы с его помощью можно было закодировать васе символы клавиатуры компьютера?

Достаточный алфавит

В алфавит мощностью 256 символов можно поместить практически все символы, которые есть на клавиатуре. Такой алфавит называется достаточным.

Т.к. 256 = 2 8 , то вес 1 символа – 8 бит.

Единице в 8 бит присвоили свое название – байт.

1 байт = 8 бит.

Таким образом, информационный вес одного символа достаточного алфавита равен 1 байту.

Для измерения больших информационных объемов используются более крупные единицы измерения информации:

Единицы измерения количества информации:

1 килобайт = 1 Кб = 1024 байта

1 мегабайт = 1 Мб = 1024 Кб

1 гигабайт = 1 Гб = 1024 Гб

Информационный объем текста

Книга содержит 150 страниц.
На каждой странице – 40 строк.
В каждой строке 60 символов (включая пробелы).
Найти информационный объем текста.

1. Количество символов в книге:

60 * 40 * 150 = 360 000 символов.

2. Т.к. 1 символ весит 1 байт, информационный объем книги равен

3. Переведем байты в более крупные единицы:

360 000 / 1024 = 351,56 Кб

351,56 / 1024 = 0,34 Мб

Ответ: Информационный объем текста 0,34 Мб.

Задача:

Информационный объем текста, подготовленного с помощью компьютера, равен 3,5 Кб. Сколько символов содержит этот текст?

Информационный объем текста 3,5 Мб. Найти количество символов в тексте.

1. Переведем объем из Мб в байты:

3,5 Мб * 1024 = 3584 Кб

3584 Кб * 1024 = 3 670 016 байт

2. Т.к. 1 символ весит 1 байт, количество символов в тексте равно

На основании одной ячейки информационной ёмкостью 1 бит можно закодировать только 2 различных состояния. Для того чтобы каждый символ, который можно ввести с клавиатуры в латинском регистре, получил свой уникальный двоичный код, требуется 7 бит. На основании последовательности из 7 бит, в соответствии с формулой Хартли, может быть получено N =2 7 =128 различных комбинаций из нулей и единиц, т.е. двоичных кодов. Поставив в соответствие каждому символу его двоичный код, мы получим кодировочную таблицу. Человек оперирует символами, компьютер – их двоичными кодами.

Для латинской раскладки клавиатуры такая кодировочная таблица одна на весь мир, поэтому текст, набранный с использованием латинской раскладки, будет адекватно отображен на любом компьютере. Эта таблица носит название ASCII (American Standard Code of Information Interchange) по-английски произносится [э́ски], по-русски произносится [а́ски]. Ниже приводится вся таблица ASCII, коды в которой указаны в десятичном виде. По ней можно определить, что когда вы вводите с клавиатуры, скажем, символ “*”, компьютер его воспринимает как код 42(10), в свою очередь 42(10)=101010(2) – это и есть двоичный код символа “*”. Коды с 0 по 31 в этой таблице не задействованы.

Это первая часть перевода статьи What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text

Если вы работаете с текстом в компьютере, вам обязательно нужно знать про кодировки. Даже если вы посылаете электронные письма. Даже если вы их только получаете. Необязательно понимать каждую деталь, но надо хотя бы знать, что из себя представляют кодировки. И вот первая хорошая новость: статья может быть немного запутанной, но основная идея очень и очень простая.

Эта статья о кодировках и наборах символов.

Статья Джоеэля Спольски под названием «Абсолютный минимум о Unicode и наборе символов для каждого разработчика(без исключений!)» будет хорошей вводной и мне доставляет большое удовольствие перечитывать ее время от времени. Я стесняюсь отсылать к ней тех людей, которые испытывают трудности с пониманием проблем с кодировкам, хотя она довольно легкая в плане технических деталей. Я надеюсь, эта статья прольет немного света на то, чем именно являются кодировки, и почему все ваши тексты оказываются испорченными в самый ненужный момент. Статья предназначена для разработчиков(главным образом, на PHP), но пользу от нее может получить любой пользователь компьютера.

Основы

Все более или менее слышали об этом, но каким-то образом знание испаряется, когда дело доходит до обсуждения, так что вот вам: компьютер не может хранить буквы, числа, картинки или что-либо еще. Он может запомнить только биты. Бит имеет только два значения: ДА или НЕТ, ПРАВДА или ЛОЖЬ, 1 или 0 или любую другую пару, которую вы можете вообразить. Раз уж компьютер работает с электричеством, бит представлен электрическим зарядом: он либо есть, либо его нет. Людям проще представлять это в виде 1 и 0, так что я буду придерживаться этих обозначений.

Чтобы с помощью битов представлять нечно полезное, нам нужны правила. Надо сконвертировать последовательность бит в что-то похожее на буквы, числа и изображения, используя схему кодирования, или, коротко, кодировку. Вот так, например:

01100010 01101001 01110100 01110011
b i t s

В этой кодировке, 01100010 представляет из себя ‘b’, 01101001 — ‘i’, 01110100 — ‘t’, 01110011 — ‘s’. Конкретная последовательность бит соответствует букве, а буква – конкретной последовательности битов. Если вы можете запомнить последовательности для 26 букв или умеете действительно быстро находить нужное соответствие, то вы сможете читать биты, как книги.
Упомянутая схема носит название ASCII. Строка с нолями и единицами разбивается на части по 8 бит(по байтам). Кодировка ASCII определяет таблицу перевода байтов в человеческие буквы. Вот небольшой кусочек этой таблицы:

01000001 A
01000010 B
01000011 C
01000100 D
01000101 E
01000110 F

В ней 95 символов, включая буквы от A до Z, в нижнем и верхнем регистре, цифры от 0 до 9, с десяток знаков препинания, амперсанд, знак доллара и прочие. В нее также включены 33 значения, такие как пробел, табуляция, перевод строки, возврат символа и прочие. Это непечатаемые символы, хотя они видимы человеку и используются им. Некоторые значения полезны только компьютеру, такие как коды начала и конца текста. Всего в кодировку ASCII включены 128 символов — прекрасное ровное число для тех, кто смыслит в компьютерах, так как оно использует все комбинации 7ми битов (от 0000000 до 1111111).

Вот вам способ представить человеческую строку, используя только единицы и нули:

01001000 01100101 01101100 01101100 01101111 00100000
01010111 01101111 01110010 01101100 01100100

Важные термины

Для кодирования чего-либо в ASCII двигайтесь справа налево, подменяя буквы на биты. Для декодирования битов в символы, следуйте по таблице слева направо, подменяя биты на буквы.

encode |enˈkōd|
verb [ with obj. ]
convert into a coded form
code |kōd|
noun
a system of words, letters, figures, or other symbols substituted for other words, letters, etc.

Кодирование – это представление чего-либо чем-нибудь другим. Кодировка – это набор правил, описывающий способ перевода одного представления в другое.

Прочие термины, заслуживающие прояснения:

Набор символов, чарсет, charset – Набор символов, который может быть закодирован. «Кодировка ASCII включает набор из 128 символов». Синоним к кодировке.

Кодовая страница – страница кодов, закрепляюшая за символом набор битов. Таблица. Синоним к кодировке.

Строка – пачка чего-нибудь, объединенных вместе. Битовая строка – это пачка бит, такая как 00011011. Символьная строка – это пачка символов, например «Вот эта». Синоним к последовательности.

Двоичный, восьмеричный, десятичный, шестнадцатеричный

Существует множество способов записывать числа. 10011111 – это бинарная запись для 237 в восьмеричной, 159 в десятичной и 9F в шестнадцатиричной системах. Значения у всех этих чисел одинаково, но шестнадцатиричная система короче и проще для понимания, чем двоичная. Я буду придерживаться двоичной системы в этой статье, чтобы улучшить понимание и убрать лишний уровень абстракции. Не пугайтесь, встречая коды символов в других нотациях, все значения эквиваленты.

Excusez-Moi?

Раз уж мы теперь знаем, о чем говорим, заметим: 95 символов – это совсем немного, когда речь идет о языках. Этот набор покрывает базовый английский, но как насчет французских символов? А вот это Straßen¬übergangs¬änderungs¬gesetz из немецкого языка? А приглашение на smörgåsbord в шведском? В-общем, не получится. Не в ASCII. Спецификация на представление é, ß, ü, ä, ö просто отсутствует.

“Постойте-ка”, скажут европейцы, “в обычных компьютерах с 8 битами в байте, ASCII никак не использует бит, который всегда равен 0! Мы можем использовать его, чтобы расширить таблицу еще на 128 значений”. И было так. Но способов обозначить звучание гласных еще слишком много. Не все сочетания букв и значений, используемые в европейских языках, влезают в таблицу из 256 записей. Так мир пришел к изобилию кодировок, стандартов, стандартов де-факто и недостандартов, которые покрывают все субнаборы символов. Кому-то понадобилось написать документ на шведском или чешском, и, не найдя нужной кодировки, просто изобрел еще одну. Или я думаю, что все так и произошло.

Не забывайте о русском, хинди, арабском, корейском и множестве других живых языков планеты. Про мертвые уж молчим. Как только вы найдете способ писать документ, использующий несколько языков, попробуйте добавить китайский. Или японский. Оба содержат тысячи символов. И у вас всего 256 значений. Вперед!

Многобайтные кодировки

Для создания таблиц, которые содержат более 256 символов, одного байта просто недостаточно. Двух байтов (16 бит) хватит для кодировки 65536 различных значений. Big-5 например, кодировка двухбайтная. Вместо разбиения последовательности битов в блоки по 8, она использует блоки по 16 битов и содержит большую(я имею ввиду БОЛЬШУЮ) таблицу с соответствием. Big-5 в своем основном виде покрывает большинство символов традиционного китайского. GB18030 – это похожая кодировка, но она включает как традиционный, так и упрощенный китайский. И, прежде чем вы спросите, да, есть кодировки только для упрощенного китайского. А разве одной недостаточно?

Вот кусок таблицы GB18030:

bits character
10000001 01000000 丂
10000001 01000001 丄
10000001 01000010 丅
10000001 01000011 丆
10000001 01000100 丏

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

Путаница с Unicode

В итоге тем, кому больше всех надоела эта каша, пришла в голову идея разработать единый стандарт, объединяющий все кодировки. Этим стандартом стал Unicode. Он определяет невероятную таблицу из 1 114 112 пунктов, используемую для всех вариантов букв и символов. Этого хватит для кодирования всех европейских, средне-азиатских, дальневосточных, южных, северных, западных, доисторических и будущих символов, о которых человечеству известно. Unicode позволяет создать документ на любом языке любыми символами, которые можно ввести в компьютер. Это было невозможно, или очень затруднительно до эры Unicode. В стандарте есть даже неофициальная секция под клингонский. Вы поняли, Unicode настолько большой, чтобы допускает неофициальные секции.

Итак, и сколько же байт использует Unicode для кодирования? Нисколько. Потому что Unicode – это не кодировка.
Смущены? Не вы одни. Unicode в первую и главную очередь определяет таблицу пунктов для символов. Это такой способ сказать «65 – A, 66 – B, 9731 – »(я не шучу, так и есть). Как эти пункты кодируются в байты является предметом другого разговора. Для представления 1 114 112 значений двух байт недостаточно. Трех достаточно, но 3 – странное число, так что 4 является комфортным минимумом. Но, пока вы не используете китайский, или другой язык со множеством символов, которые требуют большого количества битов для кодирования, вам никогда не придет в голову использовать толстую колбасу из 4х байт. Если “A” всегда кодируется в 00000000 00000000 00000000 01000001, а “B” – в 00000000 00000000 00000000 01000010, то документ, использующий такую кодировку, распухнет в 4 раза.

Существует несколько способов решения этой проблемы. UTF-32 – это кодировка, которая переводит все символы в наборы из 32 бит. Это простой алгоритм, но изводящий много места впустую. UTF-16 и UTF-8 являются кодировками с переменной длиной кодирования. Если символ может быть закодирован одним байтом(потому что номер пункта символа очень маленький), UTF-8 закодирует его одним байтом. Если нужно 2 байта, то используется 2 байта. Кодировка сообщает старшими битами, сколькими битами кодируется текущий символ. Такой способ экономит место, но так же и тратит его в случае, если эти сигнальные биты часто используются. UTF-16 является компромиссом: все символы как минимум двухбайтные, но их размер может увеличиваться до 4 байт, если нужно.

character encoding bits
A UTF-8 01000001
A UTF-16 00000000 01000001
A UTF-32 00000000 00000000 00000000 01000001
あ UTF-8 11100011 10000001 10000010
あ UTF-16 00110000 01000010
あ UTF-32 00000000 00000000 00110000 01000010

И все. Unicode – это огромная таблица соответствия символов и чисел, а различные UTF кодировки определяют, как эти числа переводятся в биты. В-общем, Unicode – это просто еще одна схема. Ничего особенного, она просто пытается покрыть все, что можно, оставаясь эффективной. И это хорошо.

Пункты

Символы определяются по их Unicode-пунктам. Эти пункты записаны в шестнадцатеричной системе и предварены “ U+” (просто для удобство, не значит ничего, кроме “Это пункт Unicode”). Символ Ḁ имеет пункт U+1E00. Иными(десятичными) словами, это 7680й символ таблицы Unicode. Он официально называется “ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА А С КОЛЬЦОМ СНИЗУ”.

Ниасилил

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

11000100 01000010 Windows Latin 1 ÄB
11000100 01000010 Mac Roman ƒB
11000100 01000010 GB18030 腂

characters encoding bits

Føö Windows Latin 1 01000110 11111000 11110110
Føö Mac Roman 01000110 10111111 10011010
Føö UTF-8 01000110 11000011 10111000 11000011 10110110

Заблуждения, смущения и проблемы

Имея все вышесказанное, мы приходим к насущным проблемам, которые испытывают множество пользователей и разработчиков каждый день, как они соотносятся с указанным выше, и каковы пути решения. Сама большая проблема – это

Какого черта мой текст нечитаем?

Если вы откроете документ, и он выглядит так, как текст выше, то причина у этого одна: ваша программа ошиблась с кодировкой. И все. Документ не испорчен(по крайней мере, пока), и не нужно никакое волшебство. Вместо него надо просто выбрать правильную кодировку для отображения текста. Предполагаемый документ выше содержит биты:

10000011 01000111 10000011 10010011 10000011 01010010 10000001 01011011
10000011 01100110 10000011 01000010 10000011 10010011 10000011 01001111
10000010 11001101 10010011 11101111 10000010 10110101 10000010 10101101
10000010 11001000 10000010 10100010

Так, быстренько угадали кодировку? Если вы пожали плечами, то вы правы. Да кто знает?
Попробуем с ASCII. Большая часть этих байтов начинается с 1. Если вы правильно помните, ASCII вообще-то не использует этот бит. Так что ASCII не вариант. Как насчет UTF-8? Большая часть байт не является валидными значениями в этой кодировке. Как насчет Mac Roman(еще одна европейская кодировка)? Хм, для нее эти байты являются правильными значениями. 10000011 декодируетися в ”É”, в “G” и так далее. Так что в Mac Roman текст будет выглядеть так: ÉGÉìÉRÅ[ÉfÉBÉìÉOÇÕìÔǵÇ≠ǻǢ. Правильно? Нет? Может быть? А компьютер-то откуда знает? Может кто-то хотел написать именно это. Насколько я знаю, это может быть последовательностью ДНК! Так и порешим: это Mac Roman, и это ДНК.

Конечно, это полный бред. Правильный ответ таков: текст закодирован в Japanes Shift-JIS и должен выглядеть как エンコーディングは難しくない. Кто бы мог подумать?
Первая причина нечитаемости текста в том, что кто-то пытается прочитать последовательность байт в неверной кодировке. Компьютеру всегда нужно подсказывать. Сам он не догадается. Некоторые типы документов определяют кодировку своего содержимого, но последовательность байт всегда остается черным ящиком.
Большинство браузеров предоставляют возможность указать кодировку страницы с помощью специального пункта меню. Иные программы тоже имеют аналогичные пункты.

У автора нет разбиения на части, но статья и так длинна. Продолжение будет через пару дней.

Бит, байт и простое объяснение логических операций.

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

 

Бит - (англ. binary digit; также игра слов: англ. bit — немного) — единица измерения информации, один разряд двоичного кода (двоичная цифра).  Бит может принимать только два значения "0" или "1", да или нет, включено/выключено, и т. п. В вычислительной технике  "0" и "1"  передаются различными уровнями напряжения, к примеру, в микросхемах  ТТЛ  "0" соответствует  напряжением в диапазоне от +0 до + 0,8 В, а "1" в диапазоне от 2,0 до 5,0 В"..

«Бит» часто применяется в значении «двоичный разряд»(старший бит — старший двоичный разряд байта или слова, младший бит - младший разряд слова , о которых идёт речь). Относительно к микроконтроллерам, мы часто будем сталкиваться с битами. В семействе  микроконтроллерах  PIC18XXXX существуют специальные БИТ-ОРИЕНТИРОВАННЫЕ КОМАНДЫ. с помощью которых можно будет сбрасывать/устанавливать определенные биты в байтах (регистрах).
 

Байт (англ. byte) — единица измерения количества информации. В стандартном виде байт считается равным восьми  двоичным цифрам (битам). Он  может принимать 256 (2 в 8 й степени) различных значений. Значениями одного байта можно кодировать довольно большие объемы информации. Например, все заглавные и строчные буквы алфавита, цифры, знаки препинания, символы и служебные коды, используемые при передаче данных.Емкость различных  устройств хранения информации, в том числе и в микроконтроллерах, измеряется тоже в байтах. Так же как при работе с битами, в семействе  микроконтроллерах  PIC18XXXX существуют и БАЙТ-ОРИЕНТИРОВАННЫЕ КОМАНДЫ, которые позволяют изменять байт "целиком" (сбрасывать, записывать в него данные (0-255) и т.д.). Младший бит находится справа, соответственно старший слева.

Многие путают  производные единицы — килобиты  с  килоБайтами. Заметьте я специально написал байты с большой буквы, вот на это и следует обращать внимание. Если написано кб - имеется в виду килобит, если написано кБ - то имеется ввиду килобайт. И килобайт соответственно больше в восемь раз килобита. То же самое Мегабиты ( Мб ) и  МегаБайты  (МБ)  и т.д..

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

В предыдущей главе мы выяснили, что двоичные числа,  так же как и десятичные, можно складывать, умножать, вычитать и делить. Естественно, что эти операции можно производить и над байтами. А в  микроконтроллерах кроме этого, предусмотрены различные команды сравнения, сдвига, в том числе и команды, выполняющие простые логические операции.  Если Вы сталкивались ранее с логическими микросхемами, то соответственно сталкивались и с побитовыми логическими операциями "И", "ИЛИ", "НЕ" и исключающие ИЛИ. Для тех кто слабо понимает что это такое попробуем разобраться.

Побитовое отрицание (NOT)  (или побитовое "НЕ", или дополнение) — это бинарная операция, действие которой эквивалентно применению логического отрицания к каждому биту двоичного представления операнда. Простыми  словами, там где в двоичном представлении операнда был 0, после выполнения операции будет 1, и, наоборот, где была 1, там будет 0.  В семействе  микроконтроллерах  PIC18XXXX  есть такая команда  "COMF", которая инвертирует содержимое регистра (байта). Обозначение:

Пример:

 

1 0 1 1 1 0 0 1
0 1 0 0 0 1 1 0

 

Побитовое И (AND)— это бинарная операция, действие которой эквивалентно применению логического "И"  к каждой паре битов, которые стоят на одинаковых позициях в сравниваемых байтах . Другими словами, если оба соответствующих бита байтов равны 1, то результат двоичного разряда  будет 1; если же хотя бы один бит из пары равен 0, то результат двоичного разряда будет  0. По отношению к микроконтроллерам существуют команда  "ANDWF", к стати первые три буквы  AND как раз и говорят об  операции "И" над регистром (байтом) "F"  и   "W" (пока не будем вникать и назовем его то же байт, по сути так и есть). Обозначение: a & b

Пример:

1 0 0 1 1 1 0 1
1 1 0 0 0 1 1 1
1 0 0 0 0 1 0 1

Побитовое ИЛИ (OR)  — это бинарная операция, действие которой эквивалентно применению логического "ИЛИ"  к каждой паре битов, которые стоят на одинаковых позициях в сравниваемых байтах. Другими словами, если оба соответствующих бита байтов равны 0, то результат двоичного разряда  будет 0; если же хотя бы один бит из пары равен 1, то результат двоичного разряда будет  1. Опять же по отношению к микроконтроллерам существуют команда  "IORWF".  Обозначение: a | b

Пример:

1 0 0 0 1 1 1 1
0 0 1 0 1 0 0 0
1 0 1 0 1 1 1 1

Сложение по модулю два (XOR) (исключающее ИЛИ) —  это бинарная операция, результат действия которой равен 1, если число складываемых единичных битов нечетно, если же их число четно, то результат ,будет  0.b

Пример:

1 1 0 0 0 1 0 0
1 0 0 0 1 1 1 0
0 1 0 0 1 0 1 0

К логическим битовым операциям можно также отнести  битовые сдвиги. Их несколько - это  логический, циклический  и арифметический. Нас интересует только циклический сдвиг.  При циклическом сдвиге, значение последнего бита по направлению сдвига копируется в первый бит .

В  семействе  микроконтроллерах  PIC18XXXX  есть такие команды, как RLCF, RLNCF- сдвиг регистра влево  через перенос и без переноса и RRCF, RRNC - то же самое только сдвиг регистра (байта) происходит вправо. Более подробно мы остановимся,  когда будет рассматривать  команды микроконтроллера.

Разбираемся с прямым и обратным порядком байтов / Хабр

Перевод статьи Халида Азада — Understanding Big and Little Endian Byte Order

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

  • Проблема: Компьютеры, как и люди, говорят на разных языках. Одни записывают данные “слева направо” другие “справа налево”. При этом каждое устройство отлично считывает собственные данные — проблемы начинаются, когда один компьютер сохраняет данные, а другой пытается эти данные считать.
  • Решение: Принять некий общий формат (например, весь сетевой трафик передается в едином формате). Или всегда добавлять заголовок, описывающий формат хранения данных. Если считанный заголовок имеет обратный порядок, значит данные сохранены в другом формате и должны быть переконвертированы.


Числа и данные

Наиболее важная концепция заключается в понимании разницы между числами и данными, которые эти числа представляют. Число — это абстрактное понятия, как исчислитель чего-то. У Вас есть десять пальцев. Понятие “десять” не меняется, в зависимости от использованного представления: десять, 10, diez (испанский), ju (японский), 1010 (бинарное представление), Х (римские числа)… Все эти представления указывают на понятие “десяти”.

Сравним это с данными. Данные — это физическое понятие, просто последовательность битов и байтов, хранящихся на компьютере. Данные не имеют неотъемлемого значения и должны быть интерпретированы тем, кто их считывает.

Данные — это как человеческое письмо, просто набор отметок на бумаге. Этим отметкам не присуще какое-либо значение. Если мы видим линию и круг (например, |O), то можно интерпретировать это как “десять”. Но это лишь предположение, что считанные символы представляют число. Это могут быть буквы “IO” — название спутника Юпитера. Или, возможно, имя греческой богини. Или аббревиатура для ввода/вывода. Или чьи-то инициалы. Или число 2 в бинарном представлении (“10”). Этот список предположений можно продолжить. Дело в том, что один фрагмент данных (|O) может быть интерпретировано по разному, и смысл остается не ясен, пока кто-то не уточнит намерения автора.

Компьютеры сталкиваются с такой же проблемой. Они хранят данные, а не абстрактные понятия, используя при этом 1 и 0. Позднее они считывают эти 1 и 0 и пытаются воссоздать абстрактные понятия из набора данных. В зависимости от сделанных допущений, эти 1 и 0 могут иметь абсолютно разное значение.

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

Основные концепции:

  • Данные (биты и байты или отметки на бумаге) сами по себе не имеют смысла. Они должны быть интерпретированы в какое-то абстрактное понятие, например, число.0 = 8 + 1 = 9).
  • Биты нумеруются справа налево. Бит 0 является крайним правым и он наименьший. Бит 7 является крайним левым и он наибольший.

Мы можем использовать эти соглашения в качестве строительного блока для обмена данными. Если мы сохраняем и читаем данные по одному байту за раз, то этот подход будет работать на любом компьютере. Концепция байта одинаковая на всех машинах, понятие “байт 0” одинакова на всех машинах. Компьютеры также отлично понимают порядок, в котором Вы посылаете им байты — они понимают какой байт был прислан первым, вторым, третьим и т. д. “Байт 35” будет одним и тем же на всех машинах.

Так в чем же проблема — компьютеры отлично ладят с одиночными байтами, правда? Ну, все превосходно для однобайтных данных, таких как ASCII-символы. Однако, много данных используют для хранения несколько байтов, например, целые числа или числа с плавающей точкой. И нет никакого соглашения о том, в каком порядке должны хранится эти последовательности.

Пример с байтом

Рассмотрим последовательность из 4 байт. Назовем их W X Y и Z. Я избегаю наименований A B C D, потому что это шестнадцатеричные числа, что может немного запутывать. Итак, каждый байт имеет значение и состоит из 8 бит.
Имя байта            W         X          Y          Z
Позиция              0         1          2          3
Значение (hex)      0x12      0x34       0x56       0x78

Например, W — это один байт со значением 0х12 в шестнадцатеричном виде или 00010010 в бинарном. Если W будет интерпретироваться как число, то это будет “18” в десятеричной системе (между прочим, ничто не указывает на то, что мы должны интерпретировать этот байт как число — это может быть ASCII-символ или что-то совсем иное). Вы все еще со мной? Мы имеем 4 байта, W X Y и Z, каждый с различным значением.
Понимаем указатели

Указатели являются ключевой частью программирования, особенно в языке С. Указатель представляет собой число, являющееся адресом в памяти. И это зависит только от нас (программистов), как интерпретировать данные по этому адресу.

В языке С, когда вы кастите (приводите) указатель к конкретному типу (такому как char * или int *), это говорит компьютеру, как именно интерпретировать данные по этому адресу. Например, давайте объявим:

void *p = 0;   // p указатель на неизвестный тип данных
	           // p нулевой указатель - не разыменовывать
char *c;       // c указатель на один байт

Обратите внимание, что мы не можем получить из р данные, потому что мы не знаем их тип. р может указывать на цифру, букву, начало строки, Ваш гороскоп или изображение — мы просто не знаем, сколько байт нам нужно считать и как их интерпретировать.

Теперь предположим, что мы напишем:

c = (char *)p;

Этот оператор говорит компьютеру, что р указывает на то же место, и данные по этому адресу нужно интерпретировать как один символ (1 байт). В этом случае, с будет указывать на память по адресу 0, или на байт W. Если мы выведем с, то получим значение, хранящееся в W, которое равно шестнадцатеричному 0x12 (помните, что W — это полный байт). Этот пример не зависит от типа компьютера — опять же, все компьютеры одинаково хорошо понимают, что же такое один байт (в прошлом это было не всегда так).

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

Так в чем же проблема?

Проблемы начинаются, когда компьютер пытается считать несколько байт. Многие типы данных состоят больше чем из одного байта, например, длинные целые (long integers) или числа с плавающей точкой. Байт имеет только 256 значений и может хранить числа от 0 до 255.

Теперь начинаются проблемы — если Вы читаете многобайтные данные, то где находится старший байт?

  • Машины с порядком хранения от старшего к младшему (прямой порядок) хранят старший байт первым. Если посмотреть на набор байтов, то первый байт (младший адрес) считается старшим.
  • Машины с порядком хранения от младшего к старшему (обратный порядок) хранят младший байт первым. Если посмотреть на набор байт, то первый байт будет наименьшим.

Такое именование имеет смысл, правда? Тип хранения от старшего к младшему подразумевает, что запись начинается со старшего и заканчивается младшим (Между прочим, английский вариант названий от старшего к младшего (Big-endian) и от младшего к старшему (Little-endian) взяты из книги “Путешествия Гулливера”, где лилипуты спорили о том, следует ли разбивать яйцо на маленьком конце (little-end) или на большом (big-end)). Иногда дебаты компьютеров такие же осмысленные 🙂

Повторюсь, порядок следования байтов не имеет значения пока Вы работаете с одним байтом. Если у Вас есть один байт, то это просто данные, которые Вы считываете и есть только один вариант их интерпретации (опять таки, потому что между компьютерами согласовано понятие одного байта).

Теперь предположим, что у нас есть 4 байта (WXYZ), которые хранятся одинаково на машинах с обоими типами порядка записи байтов. То есть, ячейка памяти 0 соответствует W, ячейка 1 соответствует X и т. д.

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

c = 0;     // указывает на позицию 0 (не будет работать на реальной машине!)
*c = 0x12; // устанавливаем значение W
c = 1;     // указывает на позицию 1
*c = 0x34; // устанавливаем значение X
...        // то же повторяем для Y и Z

Такой код будет работать на любой машине и успешно установит значение байт W, X, Y и Z расположенных на соответствующих позициях 0, 1, 2 и 3.
Интерпретация данных

Теперь давайте рассмотрим пример с многобайтными данными (наконец-то!). Короткая сводка: “short int” это 2-х байтовое число (16 бит), которое может иметь значение от 0 до 65535 (если оно беззнаковое).8) потому что его нужно сдвинуть на 8 бит.
  • Машина с обратным порядком хранения: Я не знаю что курит мистер “От старшего к младшему”. Я соглашусь, что short int состоит из 2 байт и я считаю их точно также: позиция s со значение 0х12 и позиция s + 1 со значением 0х34. Но в моем мире первым является младший байт! И число должно быть байт 0 + 256 * байт 1 или 256 * X + W, или 0х3412.

  • Обратите внимание, что обе машины начинали с позиции s и читали память последовательно. Не никакой путаницы в том, что значит позиция 0 и позиция 1. Как и нет никакой путаницы в том, что являет собой тип short int.

    Теперь Вы видите проблему? Машина с порядком хранения от старшего к младшему считает, что s = 0x1234, в то время как машина с порядком хранения от младшего к старшему думает, что s = 0x3412. Абсолютно одинаковые данные дают в результате два совершенно разных числа.

    И еще один пример

    Давайте для “веселья” рассмотрим еще один пример с 4 байтовым целым:
    int *i; // указатель на int (4 байты 32-битовой машине)
    i = 0;  // указывает на позицию 0, а *i значение по этому адресу
    

    И опять мы задаемся вопросом: какое значение хранится по адресу i?
    • Машина с прямым порядком хранения: тип int состоит из 4 байт и первый байт является старшим. Считываю 4 байта (WXYZ) из которых старший W. Полученное число: 0х12345678.
    • Машина с обратным порядком хранения: несомненно, int состоит из 4 байт, но старшим является последний. Так же считываю 4 байта (WXYZ), но W будет расположен в конце — так как он является младшим. Полученное число: 0х78563412.

    Одинаковые данные, но разный результат — это не очень приятная вещь.
    Проблема NUXI

    Проблему с порядком байт иногда называют проблемой NUXI: слово UNIX, сохраненное на машинах с порядком хранения от старшего к младшему, будет отображаться как NUXI на машинах с порядком от младшего к старшему.

    Допустим, что мы собираемся сохранить 4 байта (U, N, I, и X), как два short int: UN и IX. Каждая буква занимает целый байт, как в случае с WXYZ. Для сохранения двух значений типа short int напишем следующий код:

    short *s; // указатель для установки значения переменной типа short
    s = 0;    // указатель на позицию 0
    *s = UN;  // устанавливаем первое значение: U * 256 + N (вымышленный код)
    s = 2;    // указатель на следующую позицию
    *s = IX;  // устанавливаем второе значение: I * 256 + X
    

    Этот код не является специфичным для какой-то машины. Если мы сохраним значение “UN” на любой машине и считаем его обратно, то обратно получим тоже “UN”. Вопрос порядка следования байт не будет нас волновать, если мы сохраняем значение на одной машине, то должны получить это же значение при считывании.

    Однако, если пройтись по памяти по одному байту за раз (используя трюк с char *), то порядок байт может различаться. На машине с прямым порядком хранения мы увидим:

    Byte:     U N I X
    Location: 0 1 2 3
    

    Что имеет смысл. “U” является старшим байтом в “UN” и соответственно хранится первым. Такая же ситуация для “IX”, где “I” — это старший байт и хранится он первым.

    На машине с обратным порядком хранения мы скорее всего увидим:

    Byte:     N U X I
    Location: 0 1 2 3
    

    Но и это тоже имеет смысл. “N” является младшим байтом в “UN” и значит хранится он первым. Опять же, хотя байты хранятся в “обратном порядке” в памяти, машины с порядком хранения от младшего к старшему знают что это обратный порядок байт, и интерпретирует их правильно при чтении. Также, обратите внимание, что мы можем определять шестнадцатеричные числа, такие как 0x1234, на любой машине. Машина с обратным порядком хранения байтов знает, что Вы имеете в виду, когда пишите 0x1234 и не заставит Вас менять значения местами (когда шестнадцатеричное число отправляется на запись, машина понимает что к чему и меняет байты в памяти местами, скрывая это от глаз. Вот такой трюк.).

    Рассмотренный нами сценарий называется проблемой “NUXI”, потому что последовательность “UNIX” интерпретируется как “NUXI” на машинах с различным порядком хранения байтов. Опять же, эта проблема возникает только при обмене данными — каждая машина имеет внутреннюю совместимость.

    Обмен данными между машинами с различным порядком хранения байтов

    Сейчас компьютеры соединены — прошли те времена, когда машинам приходилось беспокоиться только о чтении своих собственных данных. Машинам с различным порядком хранения байтов нужно как-то обмениваться данными и понимать друг друга. Как же они это делают?
    Решение 1: Использовать общий формат

    Самый простой подход состоит в согласовании с общим форматом для передачи данных по сети. Стандартным сетевым является порядок от старшего к младшему, но некоторые люди могут расстроиться, что не победил порядок от младшего к старшему, поэтому просто назовем его “сетевой порядок”.

    Для конвертирования данных в соответствии с сетевым порядком хранения байтов, машины вызывают функцию hton() (host-to-network). На машинах с прямым порядком хранения эта функция не делает ничего, но мы не будем говорить здесь об этом (это может разозлить машины с обратным порядком хранения 🙂 ).

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

    Точно также существует функция ntoh() (network-to-host), которая используется для чтения данных из сети. Вы должны использовать ее, чтобы быть уверенными, что правильно интерпретируете сетевые данные в формат хоста. Вы должны знать тип данных, которые принимаете, чтобы расшифровать их правильно. Функции преобразования имеют следующий вид:

    htons() - "Host to Network Short"
    htonl() - "Host to Network Long"
    ntohs() - "Network to Host Short"
    ntohl() - "Network to Host Long"
    

    Помните, что один байт — это один байт и порядок не имеет значения.

    Эти функции имеют критическое значение при выполнении низкоуровневых сетевых операций, таких как проверка контрольной суммы IP-пакетов. Если Вы не понимаете сути проблемы с порядком хранения байтов, то Ваша жизнь будет наполнена болью — поверьте мне на слово. Используйте функции преобразования и знайте, зачем они нужны.

    Решение 2: Использования маркера последовательности байтов (Byte Order Mark — BOM)

    Этот подход подразумевает использование некого магического числа, например 0xFEFF, перед каждым куском данных. Если Вы считали магическое число и его значение 0xFEFF, значит данные в том же формате, что и у Вашей машины и все хорошо. Если Вы считали магическое число и его значение 0xFFFE, это значит, что данные были записаны в формате, отличающемся от формата вашей машины и Вы должны будете преобразовать их.

    Нужно отметить несколько пунктов. Во-первых, число не совсем магическое, как известно программисты часто используют этот термин для описания произвольно выбранных чисел (BOM может быть любой последовательностью различных байтов). Такая пометка называется маркером последовательности байтов потому что показывает в каком порядке данные были сохранены.

    Во-вторых, BOM добавляет накладные расходы для всех передаваемых данных. Даже в случае передачи 2 байт информации Вы должны добавлять к ним 2 байта маркера BOM. Пугающе, не так ли?

    Unicode использует BOM, когда сохраняет многобайтные данные (некоторые кодировки Unicode могут иметь по 2, 3 и даже 4 байта на символ). XML позволяет избежать этой путаницы, сохраняя данные сразу в UTF-8 по умолчанию, который сохраняет информацию Unicode по одному байту за раз. Почему это так круто?

    Повторяю в 56-й раз — потому что проблема порядка хранения не имеет значения для единичных байт.

    Опять же, в случае использования BOM может возникнуть другие проблемы. Что, если Вы забудете добавить BOM? Будете предполагать, что данные были отправлены в том же формате, что и Ваши? Прочитаете данные и, увидев что они “перевернуты” (что бы это не значило), попытаетесь преобразовать их? Что, если правильные данные случайно будут содержать неправильный BOM? Эти ситуации не очень приятные.

    Почему вообще существует эта проблема? Нельзя ли просто договориться?

    Ох, какой же это философский вопрос. Каждый порядок хранения байтов имеет свои преимущества. Машины с порядком следования от младшего к старшему позволяют читать младший байт первым, не считывая при этом остальные. Таким образом можно легко проверить является число нечетным или четным (последний бит 0), что очень здорово, если Вам необходима такая проверка. Машины с порядком от старшего к младшему хранят данные в памяти в привычном для человека виде (слева направо), что упрощает низкоуровневую отладку.

    Так почему же все просто не договорятся об использовании одной из систем? Почему одни компьютеры пытаются быть отличными от других? Позвольте мне ответить вопросом на вопрос: почему не все люди говорят на одном языке? Почему в некоторых языках письменность слева направо, а у других справа налево?

    Иногда системы развиваются независимо, а в последствии нуждаются во взаимодействии.

    Эпилог: Мысли на прощание

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

    Что такое бит? Что такое байт?

    Вы слышите эти термины, когда говорите о компьютерах: мегабайт , гигабайт , терабайт , 32-бит , 64-бит . Для начинающего пользователя компьютера это может сбить с толку. Итак, вот объяснение Bit и Byte .

    Терминология знакома практически каждому, но знаете ли вы, что это такое? Чтобы понять это, мы должны разбить его на основные 0 и 1.

    Что такое бит?

    A Бит является базовой единицей в компьютерной информации и имеет только два разных значения, обычно определяемых как 0 или 1. Эти значения можно интерпретировать как на или на , да или нет , истина или ложь и т. д. Это просто зависит от двоичного кода.

    Что такое байт?

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

    0 (Выкл.) Или 1 (Вкл.) = 1 бит
    8 бит = 1 байт
    1,024 байта = 1 килобайт
    1,024 Килобайт = 1 Мегабайт
    1,024 Мегабайт = 1 гигабайт
    1,024 Гигабайт = 1 Терабайт
    1,024 Терабайт = 1 петабайт
    1,024 Петабайт = 1 эксабайт
    1,024 Эксабайт = 1 Зеттабайт

    Давайте посмотрим на простой текстовый файл, который я создал, под названием sample.текст. Он содержит только восемь ( 8 ) символов, четыре ( 4 ) заглавных букв и четыре ( 4 ) строчных букв. Я создал свой текстовый файл с помощью Notepad , поэтому он закодирован с использованием стандартного двоичного кода Американского национального института стандартов (ANSI).


    Образец текстового файла всего из восьми символов, открытый в текстовом редакторе

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


    Пример текстового файла всего из восьми символов, открытого в шестнадцатеричном редакторе

    Поскольку стандарт кода ANSI является пересмотром кода Американского стандартного кода для обмена информацией (ASCII), нам необходимо использовать этот стандарт для ссылок на двоичную информацию. Используя таблицу печатаемых символов ASCII в Википедии, мы можем найти эквивалент двоичного кода.

    Персонаж Шестнадцатеричный двоичный
    А 41 01000001
    a 61 01100001
    B 42 01000010
    б 62 01100010
    С 43 01000011
    c 63 01100011
    D 44 01000100
    г 64 01100100

    Итак, как видите, каждый символ содержит 8 бит или 1 байт и весь отсчет.txt имеет размер 8 байт . Чтобы представить это в перспективе, я создал документ Microsoft Word ( sample.docx ) с теми же символами, что и образец текстового файла.


    Пример файла Microsoft Word с открытием в Microsoft Word только восьми символов


    Пример файла Microsoft Word только с восемью символами, открытого в шестнадцатеричном редакторе

    Здесь вы можете увидеть все базовое форматирование, и размер значительно увеличился.Файл sample.docx имеет размер почти 12 килобайт ( 11 513 байтов ), но содержит только восемь ( 8 ) символов.

    Что такое 32-бит / 64-бит?

    Термины 32-бит и 64-бит определяют фрагмент данных фиксированного размера, который процессор может передавать в память и из памяти. Итак, теоретически 64-разрядных компьютеров могут обрабатывать данные в два раза быстрее 32-разрядных систем .

    32-разрядная компьютерная архитектура , наиболее известная как x86 , основана на процессоре Intel 8086/8088 .Процессор Intel 8086/8088 был обнаружен в оригинальной автономной игровой приставке Pac-Man для аркад. Термин для архитектуры компьютера 64-бит - x64 , что немного проще.

    Для справки использовались следующие статьи Википедии:

    Бит - Википедия
    Байт - Википедия
    Американский национальный институт стандартов (ANSI) - Википедия
    Американский стандартный код для обмена информацией (ASCII) - Википедия
    Двоичный код - Википедия
    Шестнадцатеричный - Википедия

    Работа с двоичными данными в Python

    Обзор

    Вы хотите пройти курс по Udemy? Посмотрите этот промо-ролик о курсе Работа с двоичными данными в Python 3.

    • байт Основные сведения
    • Работа с файлами
    • Преобразование, кодирование и вывод
    • Разное
    • Примеры

    Все примеры написаны на Python 3, и многие из них не будут работать на Python 2.

    Видео: Учебник по байтам и массиву байтов для Python 3

    Тип байтов

    Тип байт в Python является неизменным и хранит последовательность значений от 0 до 255 (8 бит).Вы можете получить значение одного байта, используя индекс, как массив, но значения не могут быть изменены.

      # Создать пустые байты 
    empty_bytes = bytes (4)
    print (type (empty_bytes))
    print (empty_bytes)

    Тип байтового массива

    Для создания изменяемого объекта вам необходимо использовать bytearray типа . С bytearray вы можете делать все, что можете, с другими изменяемыми например, push, pop, insert, append, delete и sort.

      # Привести байты в bytearray 
    mutable_bytes = bytearray (b '\ x00 \ x0F')

    # Bytearray разрешает модификацию
    mutable_bytes [0] = 255
    mutable_bytes.append (255)
    print (mutable_bytes)

    назад # Привести байт назад # в байты
    immutable_bytes = bytes (mutable_bytes)
    print (immutable_bytes)

    Класс BytesIO

    Класс io.BytesIO наследуется от io.BufferedReader Класс поставляется с такими функциями, как read (), write (), peek (), getvalue ().Это общий буфер байтов, с которым вы можете работать.

      binary_stream = io.BytesIO () 
    # Двоичные данные и строки относятся к разным типам, поэтому строка
    # должна быть закодирована в двоичную с использованием ascii, utf-8 или других.
    binary_stream.write ("Hello, world! \ N" .encode ('ascii'))
    binary_stream.write ("Hello, world! \ N" .encode ('utf-8'))

    # Переместить курсор назад начало буфера
    binary_stream.seek (0)

    # Прочитать все данные из буфера
    stream_data = binary_stream.read ()

    # stream_data имеет тип 'bytes', неизменяемый
    print (type (stream_data))
    print (stream_data)

    # Чтобы изменить фактическое содержимое существующего буфера
    # используйте getbuffer () для получения объекта вы можете изменить.
    # Изменение этого объекта обновляет базовый буфер BytesIO
    mutable_buffer = binary_stream.getbuffer ()
    print (type (mutable_buffer)) # class 'memoryview'
    mutable_buffer [0] = 0xFF

    # Перечитайте исходный поток. Содержимое будет изменено
    #, потому что мы изменили изменяемый буфер
    binary_stream.seek (0)
    печать (binary_stream.read ())

    Запись байтов в файл

      # Передайте "wb", чтобы записать новый файл, или "ab", чтобы добавить 
    с open ("test.txt", "wb") как binary_file:
    # Записать текст или байты в файл
    binary_file.write ( «Записать текст в кодировке \ n» .encode ('utf8'))
    num_bytes_written = binary_file.write (b '\ xDE \ xAD \ xBE \ xEF')
    print («Написано% d байт.»% Num_bytes_written)

    В качестве альтернативы вы можете явно вызвать open и close, но если вы сделаете это таким образом, вам нужно будет выполнить обработку ошибок самостоятельно и убедиться, что файл всегда закрыт, даже если во время записи произошла ошибка.Я не рекомендую этот метод, если у вас нет веской причины.

      binary_file = open ("test.txt", "wb") 
    binary_file.write (b '\ x00')
    binary_file.close ()

    Чтение байтов из файла

      с open ("test_file.dat", "rb") как binary_file: 
    # Прочитать сразу весь файл
    data = binary_file.read ()
    print (data)

    Прочитать файл построчно

    Если вы работаете с текстовым файлом, вы можете читать данные построчно.

      с open ("test.txt", "rb") as text_file: 
    # Один из вариантов - явно вызвать readline ()
    # single_line = text_file.readline ()

    # Для итерации проще использовать цикл for каждая строка
    для строки в text_file:
    print (line)

    Получение размера файла

      импорт ОС 
    file_length_in_bytes = os.path.getsize ("test.txt")
    print (file_length_in_bytes)

    Поиск определенной позиции в файле

    Вы можете перейти к определенной позиции в файле перед чтением или записью с помощью seek ().Вы можете передать один параметр функции seek (), и она переместится в эту позицию относительно начала файла.

      # Поиск может быть вызван одним из двух способов: 
    # x.seek (смещение)
    # x.seek (смещение, начальная_точка)

    # начальная_точка может быть 0, 1 или 2
    # 0 - По умолчанию. Смещение относительно начала файла
    # 1 - Начать с текущей позиции в файле
    # 2 - Начать с конца файла (потребуется отрицательное смещение)

    с open ("test_file.dat "," rb ") как binary_file:
    # Искать определенную позицию в файле и читать N байтов
    binary_file.seek (0, 0) # Перейти к началу файла
    couple_bytes = binary_file.read (2)
    print (пара_байт)

    Целое число в байтах

      i = 16 

    # Создать один байт из целого числа 16
    single_byte = i.to_bytes (1, byteorder = 'big', signed = True)
    print (single_byte)

    # Создать четыре байта из целого числа
    four_bytes = я.to_bytes (4, byteorder = 'big', signed = True)
    print (four_bytes)

    # Сравните разницу с little endian
    print (i.to_bytes (4, byteorder = 'little', signed = True))

    # Создать байты из списка целых чисел со значениями от 0 до 255
    bytes_from_list = bytes ([255, 254, 253, 252])
    print (bytes_from_list)

    # Создать байт из целого числа с основанием 2
    one_byte = int ( '11110000', 2)
    print (one_byte)

    # Распечатать двоичную строку (например, 0b010010)
    print (bin (22))

    Байт в целое число

      # Создать int из байтов.По умолчанию без знака. 
    some_bytes = b '\ x00 \ xF0'
    i = int.from_bytes (some_bytes, byteorder = 'big')
    print (i)

    # Создать знаковое int
    i = int.from_bytes (b '\ x00 \ x0F' , byteorder = 'big', signed = True)
    print (i)

    # Использовать список целых чисел 0-255 в качестве источника байтовых значений
    i = int.from_bytes ([255, 0, 0, 0], byteorder = 'big')
    print (i)

    Кодировка текста

      # Двоичный текст 
    binary_data = b'I am text. '
    текст = двоичные_данные.decode ('utf-8')
    print (text)

    binary_data = bytes ([65, 66, 67]) # значения ASCII для A, B, C
    text = binary_data.decode ('utf-8')
    print (текст)

      # Text to Binary 
    message = "Hello" # str
    binary_message = message.encode ('utf-8')
    print (type (binary_message)) # bytes

    # Python имеет множество встроенных кодировок для разных языков,
    # и даже шифр Caeser встроен в
    import codecs
    cipher_text = codecs.encode (message, 'rot_13')
    print (cipher_text)

    Кодировка Base 64

      # Кодировать двоичные данные в строку base 64 
    binary_data = b '\ x00 \ xFF \ x00 \ xFF'

    # Использовать модуль кодеков для кодирования
    импортных кодеков
    base64_data = codecs.encode (binary_data, 'base64')
    print (base64_data)

    # Или используйте модуль binascii
    import binascii
    base64_data = binascii.b2a_base64 (binary_data)
    print (base64_data)

    # Тип строки base64_tes 9013 по-прежнему является байтовым. Может потребоваться декодирование в строку ASCII
    print (base64_data.decode ('utf-8'))

    # Декодирование выполняется аналогично
    print (codecs.decode (base64_data, 'base64'))
    print (binascii. a2b_base64 (base64_data))

    Шестнадцатеричный

      # Начиная с шестнадцатеричной строки вы можете распаковать ее до байтов 
    deadbeef = binascii.unhexlify ('DEADBEEF')
    print (deadbeef)

    # Учитывая необработанные байты, получить строку ASCII, представляющую шестнадцатеричные значения
    hex_data = binascii.hexlify (b '\ x00 \ xff') # Два байтовых значения 0 и 255

    # Результирующим значением будет строка ASCII, но это будет тип байтов.
    # Может потребоваться декодирование в обычную строку
    text_string = hex_data.decode ('utf-8') # Результат - строка "00ff"
    print (text_string)

    Строки формата

    Строки формата могут быть полезны для визуализации или вывода байтовых значений. byte3)

    # Сдвиг вправо потеряет крайний правый бит
    print (byte2 >> 3)

    # Сдвиг влево добавит 0 бит справа
    print (byte2 << 1)

    # Проверить, установлен ли один бит
    bit_mask = int ('00000001', 2) # Бит 1
    print (bit_mask & byte1) # Установлен ли бит в байте 1?
    print (bit_mask & byte2) # Установлен ли бит в byte2?

    Struct Упаковка и распаковка

    Для упаковки и распаковки требуется строка, определяющая, как двоичные данные структурирован.Ему нужно знать, какие байты представляют значения. Это нужно знать представляет ли весь набор байтов символы или это последовательность 4-байтовые целые числа. Его можно структурировать по-разному. Строки формата может быть простым или сложным. В этом примере я упаковываю одно четырехбайтовое целое число за которым следуют два символа. Буквы i и c представляют собой целые числа и символы.

      import struct 

    # Упаковка значений в байты
    # Первый параметр - это строка формата.Здесь указаны данные.

    Биты и байты

    Компьютеры выполняют все вычисления, используя код, состоящий всего из двух чисел 0 и 1. Эта система называется двоичным кодом. Электронные схемы цифрового компьютера обнаруживают разницу между двумя состояниями: ВКЛ (ток проходит) или ВЫКЛ (ток не проходит) и представляют эти состояния как 1 или 0. Каждая 1 или 0 называется двоичной цифрой, или немного.

    Биты сгруппированы в восьмизначные коды, которые обычно представляют символы (буквы, числа и символы).Восемь битов вместе называются байтом. Таким образом, каждый символ на клавиатуре имеет собственное расположение из восьми бит. Например, 01000001 для буквы A, 01000010 для B и 01000011 для C.

    Компьютеры используют стандартный код для двоичного представления символов. Это Американский стандартный код для обмена информацией или ASCII, произносимый [æski]. Чтобы избежать сложных вычислений байтов, мы используем более крупные единицы, такие как килобайты, мегабайты и гигабайты.

    Мы используем эти единицы для описания оперативной памяти, емкости дисков и размера программы или документа.

    Примечание: бит произносится как [бит]; байт произносится [приманка]

    Единица памяти Аббревиатура Значение (десятичное) Значение (двоичное) Точный объем памяти
    Двоичная цифра Бит, б 1 или 0 1 или 0
    байт B 8 бит
    Килобайт КБ или К 1024 байта (2 10 )
    Мегабайт МБ 1000 2 1024 2 1024 килобайт (2 20 )
    Гигабайт ГБ 1000 3 1024 3 1024 мегабайт (2 30 )
    Терабайт ТБ 1000 4 1024 4 1024 гигабайт (2 40 )
    Петабайт ПБ 1000 5 1024 5 1024 терабайт (2 50 )
    эксабайт EB 1000 6 1024 6 1024 Петабайт (2 60 )
    Зеттабайт ZB 1000 7 1024 7 1024 эксабайт (2 70 )
    Йоттабайт YB 1000 8 1024 8 1024 зеттабайт (2 80 )

    Бит - это наименьшая единица памяти компьютера.

    Двоичный код представляет текст или инструкции процессора компьютера, использующие две двоичные цифры системы счисления, 0 и 1. Двоичный код присваивает битовую строку каждому символу или инструкции.


    :

    1 байт

    • 荐书
    • 其它 推荐
    • 订阅
    • 关于 我
    • RSS
    • светская беседа # 1:

    • -11-23

      如何 在 Emacs 里 做 所有 事

    • Примечание Ninja: 简单 的 评论 系统

    • Женщина 、 мужчина 、 камера 、 TV做 一个 完整 的 深度 学习 应用

    • 荐书 戈壁 : 的 的 中美 故事

    • LeanCloud 开始 周期性 远程 工作 了 908

    • 树莓 派 : 用 Пи-отверстие 来 保护 隐私 和 过滤 广告

    • 爱国 指南

    • 我 在2019 г. 不错 的 几个 习惯

    • WeWork 的 创投 的 的

    • 计算机 该 该 提高 自己

    • 怎样 利用 好 路上 的 时间

    • : Educated - 震撼人心 的 回忆录

    • React hook + 后端 集成

    • Bad Blood , 创业 的 谎言

    • LeanCloud 的 故事 - AVOS 时期

    • 一点 经验 👓 -

    • 908经验 👓 - 学好 英语 的 重要性
    • Docker 和 Kubernetes 从 听过 到 略懂 : 给 程序员 的 旋风 教程

    • 加密 货币 与区块 链 (三) : 什么 是 信任

    • 离开 微 信 公众 平台

    • 加密 货币 和) : (共识 与中心 化

    • 和 区块 链 (一) 的 重演

    • 第 Ada 的 故事

    • 91 2016-09-11

      在 9/11 十五 周年

    • 快速 开发 聊天 机器人

    • 说说 离职 员工 9 0838

    • 你 所 不 知道 的 Dijkstra

    • 你 所 不 的 冯 · 冯

    • 在LeanCloud Parse 的 关闭

    • 薪酬 的 回顾

    • 比 XCodeGhost 的 30 了

    • 9029 2015 05-04

      写给 创业 的 技术 人

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *