1 байт с равен – Байт — Википедия

Содержание

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

Сегодня чему равен 1 Байт, Килобайт, Мегабайт, Гигабайт и т.д. объясняют в школе на уроках информатики и потому молодое поколение отлично владеет этой информацией. А вот для более старших и пожилых людей понять про Бит и Байт уже сложнее, а уж знать чему равен один Бит или один Байт — вообще сродни китайской грамоте. Попробую немного восполнить этот пробел. Если что-то будет непонятно, то задавайте вопросы в комментариях. Постараюсь ответить.

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

Бит — это базовая единица информации в используемой компьютером двоичной системе счисления и имеет одно из двух значений: 0 или 1.

Байт

Один Байт равен 8 битам

Половина Байта — Октет:

Половина Байта — это 4 бита

Килобайт (КБ)

Килобайт равен 1024 байт

Мегабайт (МБ)

Мегабайт равен 1.048.576 байт или 1024 Килобайт

Гигабайт (ГБ)

Гигабайт равен  1073741824 байт
или 1024 Мегабайт
или 1048576 Килобайт

Терабайт (ТБ)

Терабайт равен 1099511627776 байт
или 1024 Гигабайт
или 1048576 Мегабайт

Петабайт (ПБ)

Петабайт это 1125899906842624 байт
или 1.024 терабайт
или 1.048.576 гигабайт

Эксабайт (ЭБ)

Эксабайт это 1152921504606846976 байт
или 1024 петабайт
или 1048576 терабайт

Зеттабайт (ЗБ)

Зеттабайт равен 1180591620717411303424 байт
или 1024 эксабайт
или 1048576 петабайт

Йоттабайт (ЙБ)

Йоттабайт = 1208925819614629174706176 байт
или 1024 зеттабайт
или 1048576 эксабайта

set-os.ru

Чему равен 1 Байт | Корки.lol

Вы до сих пор не знаете чему равен 1 Байт, Килобайт, Мегабайт, Гигабайт и Террабайт?! Не беда! Сейчас всё подробно расскажу и покажу! Вы даже узнаете как называется половина байта! Интересно?!

Что такое Бит

В информатике Бит — это наименьшая единица, измеряющая количество информации. Она настолько мала, что может иметь только одно из двух значений — 0 и 1. Из последовательности байтов строится так называемый двоичный код, а сами цифры при этом называются двоичными цифрами или просто битами. Компьютер, как электронная машина, различает 0 и 1 как электрические импульсы в электронных цепях. 0 — нет импульса, 1 — есть импульс. Фактически вся информация, хранящаяся на компьютере, планшете или телефоне представляет собой набор бит, то есть нулей и единиц.

Что такое Байт

Вместе с понятием «бит» тесно используется понятие «байт». Если Вы посмотрите на картинку в начале статьи, то увидите, что байт это последовательность, состоящая из 8 бит с нумерацией от 0 до 7 справа на лево. Само понятие «байт» впервые появилось в 1956 году. Придумал его наш россий ученый В. Бухгольц, занимавшийся проектированием первого суперкомпьютера. В советских ПЭВМ один байт был равен сначала 9 бит, затем — 7 бит. В итоге, позднее, байт был расширен до 8 бит.

Чему равен Байт

Один байт равен 8 бит. В информатике так же можно встретить понятие «половина байта» или октет, который равен 4 бита.

Чему равен Килобайт (КБ) — это 1024 байт

Чему равен Мегабайт (МБ) — это 1024 Килобайт или  1048576 байт

Чему равен Гигабайт (ГБ) — это 1024 Мегабайт, или 1048576 Килобайт, или 1073741824 байт

Чему равен Терабайт (ТБ) — это 1024 Гигабайт, или 1048576 Мегабайт или 1 Терабайт равен 1099511627776

 

korki.lol

Биты и Байты — основные единицы измерения информации

Чтобы досканально разобраться что такое Биты, что такое Байты и зачем всё это нужно, давайте сначала стоит немного остановимся на понятии «Информация», так как именно на ней построена работа вычислительной техники и сетей передачи данных, в том числе и нашего любимого Интернета.
Для человека, Информация — это некие знания или сведения, которыми обмениваются люди в процессе общения. Сначала знаниями обменивались устно, передавая друг другу, затем появилась письменность и информацию стали передавать уже с помощью рукописей, а затем уже и книг. Для вычислительных систем Информация — это данные которые собираются, обрабатываются, сохраняются и передаются дальше между звеньями системы, либо между разными компьютерными системами. Но если раньше информация помещалась в книги и её объём можно было хоть как-то наглядно оценить, например в библиотеке, то в условиях цифровых технологий она стала вирутальной и её нельзя измерить с помощью обычной и привычной метрической системы, к которой мы привыкли. Поэтому были введены единицы измерения информации — Биты и Байты.

Бит информации

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

- жесткий диск (HDD, SSD) - оптический диск (CD, DVD) - съёмные USB-диски (флешки, USB-HDD) - карты памяти (SD, microSD и т.п.)

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

бит. Само слово bit пришло к нам как аббревиатура от binary digit — двоичное число. Что примечательно, в английском языке есть слово bit — немного, кусочек. Таким образом, бит — это самая наименьшая единица объёма информации.

Сколько битов в Байте

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

00000001
10000000
11111111

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

Килобайт, Мегабайт, Гигабайт

Со временем, объёмы информации росли, причём в последние годы в геометрической прогрессии. Поэтому, решено было использовать приставки метрической системы СИ: Кило, Мега, Гига, Тера и т.п.
Приставка «кило» означает 1000, приставка «мега» подразумевает миллион, «гига» — миллиард и т.д. При этом нельзя проводить аналогии между обычным килобитом и килобайтом. Дело в том, что килобайт — это отнюдь не тысяча байт, а 2 в 10-й степени, то есть 1024 байт.

Соответственно, мегабайт — это 1024 килобайт или 1048576 байт.
Гигабайт получается равен 1024 мегабайт или 1048576 килобайт или 1073741824 байт.

Для простоты можно использовать такую таблицу:

Для примера хочу привести вот такие цифры:
Стандартный лист А4 с печатным текстом занимает в средем около 100 килобайт
Обычная фотография на простой цифровой фотоаппарат — 5-8 мегабайт
Фотографии, сделанные на профессиональный фотоаппарат — 12-18 мегабайт
Музыкальный трек формата mp3 среднего качества на 5 минут — около 10 мегабайт.
Обычный фильм на 90 минут, сжатый в обычном качестве — 1,5-2 гигабайта

Тот же фильм в HD-качестве — от 20 до 40 гигабайт.

P.S.:
Теперь отвечу на вопросы, которые мне наиболее часто задают новички.
1. Сколько Килобит в Мегабите? Ответ — 1000 килобит (по системе СИ)

2. Сколько Килобайт в Мегабайте? Ответ — 1024 Килобайта
3. Сколько Килобит в Мегабайте? Ответ — 8192 килобита
4. Сколько Килобайт в Гигабайте? Ответ — 1 048 576 Килобайт.

set-os.ru

Двоичные приставки — Википедия

Двоичные (бинарные) приставки — приставки перед наименованиями или обозначениями единиц измерения информации, применяемые для формирования кратных единиц, отличающихся от базовой единицы в определённое целое, являющееся целой положительной степенью числа 2

10, число раз (210 = 1024, (210)2 = 220 = 10242, (210)3 = 230 = 10243 и т. д.). Двоичные приставки используются для образования единиц измерения информации, кратных битам и байтам.

Благодаря близости чисел 1024 и 1000 двоичные приставки построены по аналогии со стандартными десятичными приставками СИ. Наименование каждой двоичной приставки получается заменой последнего слога наименования соответствующей десятичной приставки на би (от лат. bīnārius — двоичный).

Приставки от 210 до 260 (киби, меби, гиби, теби, пеби, эксби) были предложены шведским учёным Андерсом Тором (англ.)русск. и введены Международной электротехнической комиссией (МЭК) в 1999 году во второй поправке к стандарту IEC 60027-2[1][2]. В третьей редакции стандарта IEC 60027-2, принятой в 2005 году, были добавлены приставки 270 и 280 (зеби и йоби)[1][3].

Приказом Федерального агентства по техническому регулированию и метрологии от 9 октября 2015 года N 1508-ст «О введении в действие межгосударственного стандарта» [4] введён в действие с 1 октября 2016 года в качестве национального стандарта Российской Федерации ГОСТ IEC 60027-2-2015 «Обозначения буквенные, применяемые в электротехнике. Часть 2. Электросвязь и электроника»[5], идентичный международному стандарту IEС 60027-2:2005 «Обозначения буквенные, применяемые в электротехнике. Часть 2. Электросвязь и электроника».

Выглядят они следующим образом:

ПриставкаАналогичная
десятичная
приставка
Сокращения
по МЭК для
битов, байтов
Значение, на которое
умножается исходная
величина
кибикило (103)Кибит, КиБ210 = 1024
мебимега (106)Мибит, МиБ220 = 1 048 576
гибигига (109)Гибит, ГиБ230 = 1 073 741 824
тебитера (1012)Тибит, ТиБ240 = 1 099 511 627 776
пебипета (1015)Пибит, ПиБ250 = 1 125 899 906 842 624
эксбиэкса (1018)Эибит, ЭиБ260 = 1 152 921 504 606 846 976
зебизетта (1021)Зибит, ЗиБ270 = 1 180 591 620 717 411 303 424
йобийотта (1024)Йибит, ЙиБ280 = 1 208 925 819 614 629 174 706 176

В российском ГОСТ 8.417-2002 («Единицы величин») в приложении А «Единицы количества информации» констатируется факт, что с наименованием «байт» «стандартные» приставки (обозначающие десятичные кратные единицы) используются некорректно, однако, не предлагается никакой альтернативы. Кроме, разве что, обозначения 1 Кбайт = 1024 байт (в отличие от 1 кбайт = 1000 байт).

Более поздний документ, «Положение о единицах величин, допускаемых к применению в Российской Федерации», утверждённое Правительством РФ 31 октября 2009 года, устанавливает, что наименование и обозначение единицы количества информации «байт» (1 байт = 8 бит) применяются с двоичными приставками «Кило», «Мега», «Гига», которые соответствуют множителям 210, 220 и 230 (1 Кбайт = 1024 байт, 1 Мбайт = 1024 Кбайт, 1 Гбайт = 1024 Мбайт). Указанные приставки пишутся с заглавной буквы[6].

Тем же Положением допускается применение и международного обозначения единицы информации с приставками «K» «M» «G» (KB, MB, GB, Kbyte, Mbyte, Gbyte).

Аналогичный стандарт IEEE 1541-2002 введён в 2008 г.

Основной документ Международной системы единиц (СИ) «Брошюра СИ» (фр. Brochure SI, англ. The SI Brochure) подчёркивает, что приставки СИ соответствуют исключительно степеням числа десять, и рекомендует во избежание некорректного использования наименований приставок СИ для двоичных приставок применять наименования, введённые МЭК[7].

Двоичная система счисления имеет широчайшее применение в вычислительной технике. В частности, двоичными числами нумеруются ячейки цифровой памяти. Количество адресов, возможных на некоторой шине, равно 2N, где N — количество её разрядов. Поэтому и микросхемы памяти снабжают количеством ячеек, равным какой-то степени двойки.

Число 210 = 1024 достаточно близко к тысяче, используемой в качестве основания десятичных приставок СИ. Среди степеней двойки вплоть до 293 ни одна больше не близка настолько к степени десяти; к тому же показатель двоичной степени «10» сам по себе оказался удобен для грубого пересчёта двоичных степеней на привычные людям десятичные числа. Для обозначения 210 = 1024 байт придумали единицу «К» (ка, очевидно, искажённое «кило»). В частности, в документации к одной из советских ЭВМ сказано, что объём её памяти 32 К слов. Из-за близости множителей 1024 и 1000 в разговорной речи «К» всё равно называли «кило», и вскоре такая интерпретация приставки кило стала стандартом де-факто, как и экстраполяция на другие приставки: 1 «килобайт» = 1024 байтам, 1 «мегабайт» = 1024 килобайтам = 1 048 576 байтам, и т. д.

Таким образом термины, предназначенные для десятичных приставок СИ, стали применяться к близким двоичным числам. Причём эти приставки часто используют по своему усмотрению, то есть одни понимают их как двоичные приставки, а другие как десятичные. Например, размер оперативной памяти компьютера обычно приводится в двоичных единицах (1 килобайт = 1024 байтам), а размер дисков их производители указывают в десятичных (1 килобайт = 1000 байтам). Однако на письме для множителя 1024 традиционно использовалось сокращение «К», в отличие от «к»=1000, используемого в СИ.

Чем больше число, тем большего значения может достигать ошибка, вызванная неправильным пониманием использованной приставки. В частности, разница между «двоичным» и «десятичным» килобайтом 2,4 %, в то время как между двоичным и десятичным терабайтом — почти 10 % (9,95 %). Для того, чтобы разрешить эту путаницу, и были введены особые двоичные приставки, отличные от «близких» по численному значению десятичных.

Значение приставок согласно стандарту JEDEC[править | править код]

Объединенный инженерный совет по электронным устройствам (англ. Joint Electron Devices Engineering Council, JEDEC), занимающийся разработкой и продвижением стандартов для микроэлектронной промышленности, разработал в 2002 году стандарт JEDEC 100B.01ruen определяющий значения терминов и буквенных символов. Целью данного стандарта является содействие единообразному использованию символов, аббревиатур, терминов и определений в полупроводниковой промышленности. К примеру, спецификация стандарта в качестве единицы измерения количества информации определяет значение приставки K множителем, равным 1024 (210), то есть килобайт обязан быть обозначен как Kbyte или KB и иметь значение, равное 1024 байт.

Спецификация стандарта определяет приставки следующим образом:[8]

  • kilo (K): как множитель, равный 1024 (210).
  • mega (M): как множитель, равный 1 048 576 (220 или K2, где коэффициент K = 1024).
  • giga (G): как множитель, равный 1 073 741 824 (230 или K3, где коэффициент K = 1024).
  • tera (T): как множитель, равный 1 099 511 627 776 (240 или K4, где коэффициент K = 1024).

Употребление десятичных приставок (таблица)[править | править код]

ПриставкаОбозначениеДвоичные приставкиДесятичные приставкиОтносит.
ошибка, %
килок, k210 = 1024103 = 10002,40
мегаМ, M220 = 1 048 576106 = 1 000 0004,86
гигаГ, G230 = 1 073 741 824109 = 1 000 000 0007,37
тераТ, T240 = 1 099 511 627 7761012 = 1 000 000 000 0009,95
петаП, P250 = 1 125 899 906 842 6241015 = 1 000 000 000 000 00012,59
эксаЭ, E260 = 1 152 921 504 606 846 9761018 = 1 000 000 000 000 000 00015,29
зеттаЗ, Z270 = 1 180 591 620 717 411 303 4241021 = 1 000 000 000 000 000 000 00018,06
йоттаЙ, Y280 = 1 208 925 819 614 629 174 706 1761024 = 1 000 000 000 000 000 000 000 00020,89

Двоичный подход[править | править код]

Приставки «кило-», «мега-», «гига-» понимаются как двоичные:

  • В файловых менеджерах и другом программном обеспечении для сокращённого задания размера файлов. То есть, если программа говорит, что размер файла равен 100 «КБ» (KB), то его размер приблизительно равен 102 400 байт. Однако в некоторых современных файловых менеджерах встречается правильное указание размера файлов (с использованием сокращённой формы производных двоичных приставок, например «КиБ»).
  • Производителями полупроводниковой памяти: оперативных запоминающих устройств (ОЗУ), видеопамяти.
  • Объём компакт-диска (но не DVD) задаётся именно в двоичных мегабайтах.
  • Согласно ГОСТ 8.417-2002, приставку К- (заглавной буквой) применительно к байтам исторически некорректно[9] использовали (и используют) для обозначения 1024 байт. Стандарт, однако, явно не указывает, какое написание единицы «1024 байт» следует считать корректным.
  • «Положение о единицах величин, допускаемых к применению в Российской Федерации» устанавливает[6], что наименование и обозначение единицы количества информации «байт» применяются с двоичными приставками «Кило», «Мега» и «Гига», которые соответствуют множителям 210, 220 и 230.

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

Десятичный подход[править | править код]

Приставки «кило-», «мега-», «гига-» понимаются как десятичные:

  • Ёмкость жёстких и оптических дисков задаётся именно в десятичных мегабайтах (исключение: компакт-диски, их объём задается в двоичных мегабайтах).
  • Ёмкость flash-карт памяти, USB flash-накопителей и SSD-накопителей.
  • При неформальном общении (например, про файл в 100 тысяч байт могут сказать «файл в 100 килобайт»).
  • При обозначении скоростей телекоммуникационных соединений, например, 100 Мбит/с в стандарте 100BASE-TX («медный» Fast Ethernet) соответствует скорости передачи именно 100 000 000 бит/с, а 10 Гбит/с в стандарте 10GBASE-X (Ten Gigabit Ethernet) — 10 000 000 000 бит/с.

Основные аргументы: Строгое соответствие системе СИ; повсеместное употребление десятичной системы счисления; завышение объёма носителей при помощи более мелкой единицы («коммерческие мегабайты»).

Применяемое в телекоммуникациях понятие «килобит» означает тысячу битов (по ГОСТ 8.417-2002). Впрочем, из-за влияния «килобайта» некоторые люди и организации для однозначности употребляют вместо «килобита» выражение «тысяча бит».

Иное[править | править код]

Ёмкость трёхдюймовой дискеты на 1,44 МБ (включая служебные данные — загрузочный сектор, корневой каталог и FAT) задаётся в двоично-десятичных мегабайтах. Один такой «мегабайт» равняется 1000 КиБ (≈ 0,977 МиБ), но при этом 1 КиБ равен 1024 байтам.

То есть, фактически, вместимость трёхдюймовой дискеты равна 1440 кибибайтам, или же 1 474 560 байтам (из которых для записи доступны 1 457 664). Аналогично, трёхдюймовая дискета на 2,88 МБ в действительности вмещает 2880 кибибайт, или же 2 949 120 байт.

ru.wikipedia.org

Единицы измерения объема информации

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

Мы уже знаем, что компьютер воспринимает всю информацию через нули и единички.

Бит – это минимальная единица измерения информации, соответствующая одной двоичной цифре («0» или «1»).

Байт состоит из восьми бит. Используя один байт, можно закодировать один символ из 256 возможных (256 = 28). Таким образом, один байт равен одному символу, то есть 8 битам:

1 символ = 8 битам = 1 байту.

Буква, цифра, знак препинания – это символы. Одна буква – один символ. Одна цифра – тоже один символ. Один знак препинания (либо точка, либо запятая, либо вопросительный знак и т.п.) – снова один символ. Один пробел также является одним символом.

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

Таблица байтов:

1 байт = 8 бит

1 Кб (1 Килобайт) =  210 байт = 2*2*2*2*2*2*2*2*2*2 байт =
= 1024 байт (примерно 1 тысяча байт – 103 байт)

1 Мб (1 Мегабайт) = 220 байт = 1024 килобайт (примерно 1 миллион байт – 106 байт)

1 Гб (1 Гигабайт) =   230 байт = 1024 мегабайт (примерно 1 миллиард байт – 109 байт)

1 Тб (1 Терабайт) =    240 байт = 1024 гигабайт (примерно 1012 байт). Терабайт иногда называют тонна.

1 Пб (1 Петабайт) =   250 байт = 1024 терабайт (примерно 1015 байт).

1 Эксабайт =              260 байт = 1024 петабайт (примерно 1018 байт).

1 Зеттабайт =            270 байт = 1024 эксабайт (примерно 1021 байт).

1 Йоттабайт =           280 байт = 1024 зеттабайт (примерно 1024 байт).

В приведенной выше таблице степени двойки (210, 220, 230 и т.д.) являются точными значениями килобайт, мегабайт, гигабайт. А вот степени числа 10 (точнее, 103, 106, 109 и т.п.) будут уже приблизительными значениями, округленными в сторону уменьшения. Таким образом, 210 = 1024 байта представляет точное значение килобайта, а 103 = 1000 байт является приблизительным значением килобайта.

Такое приближение (или округление) вполне допустимо и является общепринятым.

Ниже приводится таблица байтов с английскими сокращениями (в левой колонке):

1 Kb ~ 103 b = 10*10*10 b= 1000 b – килобайт

1 Mb ~ 106 b = 10*10*10*10*10*10 b = 1 000 000 b – мегабайт

1 Gb ~ 109 b – гигабайт

1 Tb ~ 1012 b – терабайт

1 Pb ~ 1015 b – петабайт

1 Eb ~ 1018 b – эксабайт

1 Zb ~ 1021 b – зеттабайт

1 Yb ~ 1024 b – йоттабайт

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

Продолжение следует…

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

Понятно, что в таблице байтов можно и дальше добавлять нули, а точнее, степени к числу 10 таким образом: 1027, 1030, 1033 и так до бесконечности. Но зачем это надо? В принципе, пока хватает терабайт и петабайт. В будущем, возможно, уже мало будет и йоттабайта.

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

Есть удобный «терабайтник» – внешний жесткий диск, который подключается через порт USB к компьютеру. На него можно записать терабайт информации. Особенно удобно для ноутбуков (где смена жесткого диска бывает проблематична) и для резервного копирования информации. Лучше заранее делать резервные копии информации, а не после того, как все пропало.

Флешки бывают 1 Гб, 2 Гб, 4 Гб, 8 Гб, 16 Гб, 32 Гб , 64 Гб и даже 1 терабайт.

CD-диски могут вмещать 650 Мб, 700 Мб, 800 Мб и 900 Мб.

DVD-диски рассчитаны на большее количество информации: 4.7 Гб, 8.5 Гб, 9.4 Гб и 17 Гб.

Упражнения по компьютерной грамотности

описаны в статье “Байт, килобайт, мегабайт…”

Статья закончилась, но можно еще прочитать:

Кодирование текстовой информации

Проверяем, кодирует ли компьютер текст

Кодирование цветовой информации


Получайте актуальные статьи по компьютерной грамотности прямо на ваш почтовый ящик.
Уже более 3.000 подписчиков

.

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

Автор: Надежда

6 июля 2010

www.compgramotnost.ru

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

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

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

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


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

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

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

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

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

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

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

  • Данные (биты и байты или отметки на бумаге) сами по себе не имеют смысла. Они должны быть интерпретированы в какое-то абстрактное понятие, например, число.
  • Как и люди, компьютеры имеют различные способы хранения одного и того же абстрактного понятия (например, мы можем различными способами сказать “10”).

Храним числа как данные

К счастью, большинство компьютеров хранят данные всего в нескольких форматах (хотя так было не всегда). Это дает нам общую отправную точку, что делает жизнь немного проще:
  • Бит имеет два состояния (включен или выключен, 1 или 0).
  • Байт — это последовательность из 8 бит. Крайний левый бит в байте является старшим. То есть двоичная последовательность 00001001 является десятичным числом девять. 00001001 = (2^3 + 2^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 (если оно беззнаковое). Давайте используем его в примере.
short *s; // указатель на short int (2 байта)
s = 0;    // указатель на позицию 0; *s это значение

Итак, s это указатель на short int, и сейчас он указывает на позицию 0 (в которой хранится W). Что произойдет, когда мы считаем значение по указателю s?
  • Машина с прямым порядком хранения: Я думаю, short int состоит из двух байт, а значит я считаю их. Позиция s это адрес 0 (W или 0х12), а позиция s + 1 это адрес 1 (X или 0х34). Поскольку первый байт является старшим, то число должно быть следующим 256 * байт 0 + байт 1 или 256 * W + X, или же 0х1234. Я умножаю первый байт на 256 (2^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), что очень здорово, если Вам необходима такая проверка. Машины с порядком от старшего к младшему хранят данные в памяти в привычном для человека виде (слева направо), что упрощает низкоуровневую отладку.

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

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

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

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

habr.com

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

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

 

Бит — (англ. 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. По отношению к микроконтроллерам существуют команда  «XORWF«. Обозначение: a^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 — то же самое только сдвиг регистра (байта) происходит вправо. Более подробно мы остановимся,  когда будет рассматривать  команды микроконтроллера.

chipmk.ru

Оставьте комментарий