Битовые операции в arduino

Определения и свойства

Для трёх состояний светофора необходимо ⌈2log⁡3⌉={\displaystyle \lceil \,\,\!^{2}\log 3\,\,\rceil =}⌈1,5849⌉=2{\displaystyle \lceil 1,5849\rceil =2} бита информации 00 — красный01 — жёлтый10 — зелёный

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

1. В математике:
1.1. Бит — это один разряд двоичного кода (двоичная цифра) может принимать только два взаимоисключающих значения: «да» или «нет», «1» или «0», «включено» или «выключено», и т. п.

1.2. Соответствует одному числовому разряду в двоичной системе счисления, принимающему значение «0» или «1» («ложь» или «истина»).

2. В электронике, в цифровой технике и в вычислительной технике:

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

Для перехода от количества возможных состояний (возможных значений) к количеству бит можно воспользоваться формулой:

log2⁡(m{\displaystyle \log _{2}(m} ){\displaystyle )} =n{\displaystyle =n} .

Следовательно, для одного двоичного разряда (триггера)):

1{\displaystyle 1}=log2⁡(2{\displaystyle =\log _{2}(2} ){\displaystyle )}.

Для перехода от количества бит к количеству возможных состояний (возможных значений) можно воспользоваться формулой:

m{\displaystyle m} =2n{\displaystyle =2^{n}}.

2.2. Формула Хартли

I=log2⁡N=nlog2⁡m,{\displaystyle I=\log _{2}N=n\log _{2}m,} где:

I{\displaystyle I} — количество информации, бит;N=mn{\displaystyle N=m^{n}} — возможное количество различных сообщений (количество возможных состояний n-разрядного регистра), шт;m{\displaystyle m} — количество букв в алфавите (количество возможных состояний одного разряда (триггера) регистра, в двоичной системе равно 2 («0» и «1»)), шт;n{\displaystyle n} — количество букв в сообщении (количество разрядов (триггеров) в регистре), шт.

Применяется для измерения объёмов запоминающих устройств и объёмов цифровых данных.

3. В теории информации:
3.1. Бит — это базовая единица измерения количества информации, равная количеству информации, содержащемуся в опыте, имеющем два равновероятных исхода; см. информационная энтропия. Это тождественно количеству информации в ответе на вопрос, допускающий ответ «да» или «нет» и никакого другого (то есть такое количество информации, которое позволяет однозначно ответить на поставленный вопрос).

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

3.3. Бит — это двоичный логарифм вероятности равновероятных событий или сумма произведений вероятности на двоичный логарифм вероятности при равновероятных событиях; см. информационная энтропия.

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

Производные единицы [ править | править код ]

Измерения в байтах
ГОСТ 8.417—2002Приставки СИ Приставки МЭК
НазваниеОбозначениеСтепеньНазваниеСтепеньНазваниеСимволСтепень
байтБ10 010 0 байтBБ2 0
килобайтКбайт10 3кило-10 3 кибибайтKiBКиБ2 10
мегабайтМбайт10 6мега-10 6 мебибайтMiBМиБ2 20
гигабайтГбайт10 9гига-10 9 гибибайтGiBГиБ2 30
терабайтТбайт10 12тера-10 12 тебибайтTiBТиБ2 40
петабайтПбайт10 15пета-10 15 пебибайтPiBПиБ2 50
эксабайтЭбайт10 18экса-10 18 эксбибайтEiBЭиБ2 60
зеттабайтЗбайт10 21зетта-10 21 зебибайтZiBЗиБ2 70
йоттабайтИбайт10 24йотта-10 24 йобибайтYiBЙиБ2 80

Кратные и дольные приставки для образования производных единиц для байта применяются не как обычно. Уменьшительные приставки не используются совсем, а единицы измерения информации, меньшие, чем байт, называются специальными словами — ниббл (тетрада, полубайт) и бит. Увеличительные приставки кратны либо 1024 = 2 10 , либо 1000 = 10 3 : 1 кибибайт равен 1024 байтам , 1 мебибайт — 1024 кибибайтам или 1024×1024 = 1 048 576 байтам и т. д. для гиби-, теби- и пебибайтов. В свою очередь 1 килобайт равен 1000 байтам , 1 мегабайт — 1000 килобайтам или 1000×1000 = 1 000 000 байтам и т. д. для гига-, тера- и петабайт. Разница между ёмкостями (объёмами), выраженными в кило = 10 3 = 1000 и выраженными в киби = 2 10 = 1024 , возрастает с ростом веса приставки. МЭК рекомендует использовать двоичные приставки — кибибайт, мебибайт, йобибайт и т. п.

Иногда десятичные приставки используются и в прямом смысле, например, при указании ёмкости жёстких дисков: у них гигабайт (гибибайт) может обозначать не 1 073 741 824 = 1024 3 байтов , а миллион килобайтов (кибибайтов), то есть 1 024 000 000 байтов , а то и просто миллиард байтов.

Почему информация шифруется в двоичной форме?

Десятичная система удобна для ввода и вывода информации, а двоичная — для организации процесса ее преобразования. Также очень популярны системы, которые содержат восемь и шестнадцать символов: они переводят машинные коды в удобную форму.

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

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

Сколько мегабайт в 1 гигабайте (байт и килобайт в мегабайте)?

Ответ на этот вопрос уже не будет столь прозаичен. Дело в том, что исторически так сложилось, что для обозначения единиц измерения информации, существенно больших байта, используются не совсем верные термины
(а точнее — совсем не верные). Дело в том, что, например, приставка «кило» означает умножение на десять в третьей степени, т.е. 10 3 (на тысячу), «мега» — умножение на 10 6 (тобишь на миллион), «гига» — на 10 9 , «тера» — на 10 12 и т.д.

Но ведь это десятичная система, скажете вы, а биты и байты ведь относятся к двоичной. И будете совершенно правы

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

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

Вот отсюда и идет вся путаница. Мы с вами все знаем, что «кило» — это умножение на 10 3 (тысячу). Вполне логично предположить, что килобайт это попросту 1000 байт, но это не так. Нам говорят, что в 1 килобайте 1024 байт
. И это верно, ибо как я уже объяснил чуть выше, изначально начали использовать неправильную терминологию и продолжают делать это до сих пор.

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

  1. Сколько байт в 1 килобайте — 2 10 (два в десятой степени) или же те самые 1024 байта
  2. А сколько байтов в 1 мегабайте — 2 20 (два в двадцатой) или же 1048576 байт (что эквивалентно 1024 умноженному на 1024)
  3. А сколько байт в 1 гигабайте — 2 30 или 107374824 байт (1024×1024х1024)
  4. 1 килобайт = 1024 байта, 1 мегабайт = 1024 килобайт, 1 гигабайт = 1024 мегабайт и 1 терабайт = 1024 гигабайт

Как перевести килобайты в байты, а мегабайты в гигабайты и терабайты?

Полная таблица (для сравнения приведена и десятичная система) пересчета байт в кило, мега, гига и терабайты
приведена ниже:

Десятичная системаДвоичная система
НазваниеРазмерностьДесять в…НазваниеРазмерностьДвойка в…
байтB10 0байтВ2 0
кило
байт
kB10 3киби
байт
KiB
Кбайт
2 10
мега
байт
MB10 6меби
байт
MiB
Мбайт
2 20
гига
байт
GB10 9гиби
байт
GiB
Гбайт
2 30
тера
байт
TB10 12теби
байт
TiB
Тбайт
2 40
пета
байт
PB10 15пеби
байт
PiB
Пбайт
2 50
экса
байт
EB10 18эксби
байт
EiB
Эбайт
2 60
зетта
байт
ZB10 21зеби
байт
ZiB
Збайт
2 70
йотта
байт
YB10 24йоби
байт
YiB
Йбайт
2 80

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

Для упрощения
«ненужные» данные из таблицы можно будет просто убрать:

НазваниеРазмерностьФормула пересчета в байты
байтВ2 0
кило
байт
Кбайт2 10
мега
байт
Мбайт2 20
гига
байт
Гбайт2 30
тера
байт
Тбайт2 40
пета
байт
Пбайт2 50
экса
байт
Эбайт2 60
зетта
байт
Збайт2 70
йотта
байт
Йбайт2 80

Давайте немного потренируемся
:

  1. Сколько мегабайт в 1 гигабайте? Правильно, 2 10 (вычисляется делением 2 30 на 2 20) или 1024 мегабайта в одном гигабайте.
  2. А сколько килобайт в мегабайте? Да, столько же — 1024 (вычисляется делением 2 20 на 2 10).
  3. А сколько килобайт в 1 терабайте? Тут чуток посложнее, ибо нужно поделить 2 40 на 2 10 , что даст нам в результате 2 30 или 1073741824 килобайт содержится в одном терабайте (а не миллиард, как было бы в десятичной системе).
  4. Что нужно сделать, чтобы перевести байт в мегабайты? Смотрим в таблицу: разделить имеющееся число байт на 2 20 (на 107374824). Т.е. вы не просто делите на миллион, как в десятичной системе (фактически перенося запятую влево на шесть знаков), а делите на число несколько большее, в результате чего получаете мегабайт меньше, чем ожидали.
  5. Сколько байт в 1 килобайте? Очевидно, что 2 10 или 1024 байта в одном килобайте.

Думаю, что принцип вам понятен.

Другие системы счисления

В цифровой технике также применяется восьмеричная система счисления, но она не нашла применения в микроконтроллерах.

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

Наиболее простой и быстрый способ преобразования чисел с одной системы счисления в другую – это применение встроенного в операционную систему калькулятора. Найти его можно следующим образом: Пуск – Все программы – Стандартные – Калькулятор.

Чтобы перейти в «нужный» режим следует кликнуть по вкладке Вид и выбрать Программист или нажать комбинацию клавиш Alt+3.

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

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

Отличия килобайтов от килобитов

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

Во-первых, необходимо сказать о том, что обозначаются килобайты/ , мегабайты/ по-разному. Например, килобайты/килобиты обозначаются KB/s и Kb/s соответственно. Такая разница и в остальных измерениях. Естественно, что отличия на этом не заканчиваются. Необходимо также понимать, что килобайты — это объем скачиваемой информации, а килобиты — сама скорость.

Для того чтобы понимать, как быстро будет закачан тот или иной объем памяти, необходимо провести простейшие расчеты. Например, провайдером интернета была заявлена скорость в 512 Kb/s. Для того чтобы рассчитать объем памяти, нужно разделить 512 на 8 (т.к. в одном байте именно 8 бит), а в итоге получается 64 KB/s. С помощью таких простых расчетов, можно получить число, обозначающее объем.

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

Бит


– наименьшая единица представления
информации. В
информатике часто используется величина,
называемая байтом (byte) и равная 8 битам.

Байт


– наименьшая единица обработки и
передачи информации.

Бит
позволяет выбрать один вариант из двух
возможных;
байт, соответственно, 1 из
256 (2 8).

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

1
Кбайт (один килобайт) = 2 10
байт = 1024 байт;

1
Мбайт (один мегабайт) = 2 10
Кбайт = 1024 Кбайт;

1
Гбайт (один гигабайт) = 2 10
Мбайт = 1024 Мбайт.

В
последнее время в связи с увеличением
объёмов обрабатываемой информации
входят в употребление такие производные
единицы, как:

1
Терабайт (Тб) = 1024 Гбайт = 2 40
байта,

1
Петабайт (Пб) = 1024 Тбайт = 2 50
байта.

Пример

.
Упорядочите по возрастанию следующую
последовательность:

1024
Мбайт, 11 Петабайт, 2224 Гбайт, 1 Терабайт.

Решение

.
Сначала приведем величины измерения
количества информации к единой величине,
удобной для данной последовательности.
В данном случае – это Гбайт.

1024
Мбайт = 1 Гбайт, что меньше 1 Терабайт =
1024 Гбайт, что, в свою очередь меньше 2224
Гбайт и меньше 11 Петабайт,

Следовательно,
последовательность, упорядоченная по
возрастанию, имеет вид:

1024
Мбайт, 1 Терабайт, 2224 Гбайт, 11 Петабайт

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

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

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

.
Количество символов в алфавите называется
его мощностью

.

Существует
двоичный алфавит, который содержит
только 2 символа, и его мощность равна
двум.

Для
представления текстовой информации в
компьютере чаще всего используется
алфавит мощностью 256 символов. Один
символ из такого алфавита несет 8 бит
информации, т.к. 2 8
= 256.

8
бит составляют один байт, следовательно,
двоичный код каждого символа занимает
1 байт памяти ЭВМ. Традиционно для
кодирования одного символа используется
количество информации, равное 1 байту
(8 битам). Все символы такого алфавита
пронумерованы от 0 до 255, а каждому номеру
соответствует 8-разрядный двоичный код
от 00000000 до 11111111.

Для
разных типов ЭВМ и операционных систем
используются различные таблицы кодировки,
отличающиеся порядком размещения
символов алфавита в кодовой таблице.
Международным стандартом на персональных
компьютерах является таблица кодировки
ASCII. Сообщения, записанные с помощью
символов ASCII, используют алфавит из 256
символов.

Кроме
того, в настоящее время существует еще
ряд кодовых таблиц для русских букв. К
ним относится таблица кодировки КОИ8,
использующая алфавит из 256 символов.

Широкое
распространение получил новый
международный стандарт UNICODE, который
отводит на каждый символ не один байт,
а два, поэтому с его помощью можно
закодировать не 256 символов, а 2 16
= 65536 различных символов.

Информативность
последовательности символов не зависит
от содержания сообщения.

Чтобы
определить объем информации в сообщении
при алфавитном подходе, нужно
последовательно решить задачи:

Определить
количество информации (i) в одном символе
по формуле
2i = N, где N – мощность
алфавита,

Определить
количество символов в сообщении,
учитывая знаки препинания и пробелы
(m),

Вычислить
объем информации по формуле: V = i * m.

Пример

.
Закодировано текстовое сообщение
«Десять букв», определить его информационный
объем по системе ASCII и UNICODE.

Решение

.
Сообщение содержит 11 символов. Один
символ из алфавита ASCII несет 8 бит
информации, поэтому информационный
объем по системе ASCII составит 11*8 бит =
88 бита = 11 байт.

Один
символ из алфавита UNICODE несет 16 бит
информации или 2 байта, поэтому
информационный объем по системе UNICODE
составит 11*16 бит = 176 бит = 22 байта.

Для
двоичного сообщения той же длины
информационный объем составляет 11 бит,
т.к. N
= 2, i
= 1 бит, m
= 11, V
= 11 бит.

История [ править | править код ]

Название «байт» было впервые использовано в июне 1956 года В. Бухгольцем (англ. Werner Buchholz ) при проектировании первого суперкомпьютера IBM 7030 Stretch для пучка одновременно передаваемых в устройствах ввода-вывода битов числом от одного до шести. Позже, в рамках того же проекта, байт был расширен до восьми бит. Слово byte было выбрано как намеренно искажённое слово bite, произносящееся так же (англ. bite — «кусок»; «часть чего-либо, отделённая за один укус»; ср. также появившееся позже название для 4-битной единицы «ниббл» от англ. nibble — «покусывать»). Изменённое написание byte через y вместо i потребовалось, чтобы избежать смешения со словом «бит» (bit) . В печати слово byte впервые появилось в июне 1959 года .

Ряд ЭВМ 1950-х и 1960-х годов (БЭСМ-6, М-220) использовали 6-битовые символы в 48-битовых или 60-битовых машинных словах. В некоторых моделях ЭВМ производства Burroughs Corporation (ныне Unisys) размер символа был равен 9 битам. В советской ЭВМ Минск-32 использовался 7-битный байт.

Байтовая адресация памяти была впервые применена в системе IBM System/360. В более ранних компьютерах адресовать можно было только целиком машинное слово, состоявшее из нескольких байтов, что затрудняло обработку текстовых данных.

8-битные байты были приняты в System/360, вероятно, из-за использования BCD-формата представления чисел: одна десятичная цифра (0—9) требует 4 бита (тетраду) для хранения; один 8-битный байт может представлять две десятичные цифры. Байты из 6 битов могут хранить только по одной десятичной цифре, два бита остаются незадействованными.

По другой версии, 8-битный размер байта связан с 8-битным же числовым представлением символов в кодировке EBCDIC.

По третьей версии, из-за двоичной системы кодирования в компьютерах наиболее выгодными для аппаратной реализации и удобными для обработки данных являются длины слов, кратные степеням двойки, в том числе и 1 байт = 2 3 = 8 битов . Системы и компьютеры с длинами слов, не кратными числу 2, отпали из-за невыгодности и неудобства.

Постепенно 8-битные байты стали стандартом де-факто; с начала 1970-х в большинстве компьютеров байты состоят из 8 битов , а размер машинного слова кратен 8 битам .

Макросы для манипуляций с битами

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

Макросы Arduino.hДействие
Читает бит под номером bit в числе value
Включает (ставит 1) бит под номером bit в числе value
Выключает (ставит 0) бит под номером bit в числе value
Ставит бит под номером bit в состояние bitvalue (0 или 1) в числе value
Возвращает 2 в степени bit
Другие встроенные макросы 
Возвращает 2 в степени bit
Проверка на включенность (1) бита bit в числе value
Проверка на выключенность (0) бита bit в числе value

Простой пример:

// тут myByte == 0
byte myByte = 0;

// тут myByte станет 128 или 0b10000000
bitSet(myByte, 7);

// тут myByte станет 192 или 0b11000000
bitWrite(myByte, 6, 1);

Есть ещё макрос , который сидит в других файлах ядра и в целом является стандартным макросом для других платформ и компиляторов, он делает то же самое, что – возвращает 2 в степени

Также в ядре Arduino есть ещё два макроса для проверки состояния бита в байте, и , их удобно использовать для условных конструкций с .

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

Обозначение [ править | править код ]

Использование русской прописной буквы «Б» для обозначения байта регламентирует Межгосударственный (СНГ) стандарт ГОСТ 8.417-2002 («Единицы величин») в «Приложении А» и Постановление Правительства РФ от 31 октября 2009 г. № 879. Кроме того, констатируется традиция использования приставок СИ вместе с наименованием «байт» для указания множителей, являющихся степенями двойки ( 1 Кбайт = 1024 байт , 1 Мбайт = 1024 Кбайт , 1 Гбайт = 1024 Мбайт и т. д., причём вместо строчной «к» используется прописная «К»), и упоминается, что подобное использование приставок СИ не является корректным. По ГОСТ IEC 60027-2-2015 строчная «к» соответствует 1000 и «Ки» — 1024, так 1 КиБ = 1024 Б, 1 кБ = 1000 Б.

Следует учитывать, что в ГОСТ 8.417, кроме «бит», для бита нет однобуквенного обозначения, поэтому использование записи вроде «Мб» как синонима для «Мбит» не соответствует этому стандарту. Но в некоторых документах используется сокращение b для bit: IEEE 1541-2002, IEEE Std 260.1-2004, в нижнем регистре: ГОСТ Р МЭК 80000-13—2016, ГОСТ IEC 60027-2-2015.

В международном стандарте МЭК IEC 60027-2 от 2005 года для применения в электротехнической и электронной областях рекомендуются обозначения:

  • bit — для бита;
  • o, B — для октета, байта. Причём о — единственное указанное обозначение во французском языке.

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

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

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

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

“Трюки” с битами

Целые

Установка nго бита

Выключение nго бита

Инверсия nго бита

Округление до ближайшей степени двойки

Округление вниз

Получение максимального целого

Получение минимального целого

Получение максимального long

Умножение на 2

Деление на 2

Умножение на mую степень двойки

Деление на mую степень двойки

Остаток от деления

И так далее

Проверка равенства

Проверка на чётность (кратность 2)

Обмен значениями

Получение абсолютного значения

Максимум из двух

Минимум из двух

Проверка на одинаковый знак

Смена знака

Вернёт 2n

Является ли число степенью 2

Остаток от деления на 2n на m

Среднее арифметическое

Получить mый бит из n (от младшего к старшему)

Получить mый бит из n (от старшего к младшему)

Проверить включен ли nый бит

Выделение самого правого включенного бита

Выделение самого правого выключенного бита

Выделение правого включенного бита

Выделение правого выключенного бита

n + 1

n – 1

Получение отрицательного значения

if (x == a) x = b; if (x == b) x = a;

Поменять смежные биты

Different rightmost bit of numbers m & n

Common rightmost bit of numbers m & n

Десятичные дроби

Примечание: хаки с float могут не работать на Ардуино!

Разбить float в массив бит (unsigned uint32_t)

#include <stdint.h>
typedef union {float flt; uint32_t bits} lens_t;
uint32_t f2i(float x) {
  return ((lens_t) {.flt = x}).bits;
}

Вернуть массив бит обратно в float

float i2f(uint32_t x) {
  return ((lens_t) {.bits = x}).flt;
}

Быстрый обратный квадратный корень

return i2f(0x5f3759df - f2i(x) / 2);

Быстрый nый корень из целого числа

float root(float x, int n) {
#DEFINE MAN_MASK 0x7fffff
#DEFINE EXP_MASK 0x7f800000
#DEFINE EXP_BIAS 0x3f800000
  uint32_t bits = f2i(x);
  uint32_t man = bits & MAN_MASK;
  uint32_t exp = (bits & EXP_MASK) - EXP_BIAS;
  return i2f((man + man / n) | ((EXP_BIAS + exp / n) & EXP_MASK));
}

Быстрая степень

return i2f((1 - exp) * (0x3f800000 - 0x5c416) + f2i(x) * exp)

Быстрый натуральный логарифм

#DEFINE EPSILON 1.1920928955078125e-07
#DEFINE LOG2 0.6931471805599453
return (f2i(x) - (0x3f800000 - 0x66774)) * EPSILON * LOG2

Быстрая экспонента

return i2f(0x3f800000 + (uint32_t)(x * (0x800000 + 0x38aa22)))

Строки

Конвертировать в нижний регистр

Конвертировать в верхний регистр

Инвертировать регистр

Позиция буквы в алфавите (англ)

Позиция большой буквы в алфавите (англ)

Позиция строчной буквы в алфавите (англ)

Важные страницы

  • Каталог ссылок на дешёвые Ардуины, датчики, модули и прочие железки с AliExpress у проверенных продавцов
  • Подборка библиотек для Arduino, самых интересных и полезных, официальных и не очень
  • Полная документация по языку Ардуино, все встроенные функции и макро, все доступные типы данных
  • Сборник полезных алгоритмов для написания скетчей: структура кода, таймеры, фильтры, парсинг данных
  • Видео уроки по программированию Arduino с канала “Заметки Ардуинщика” – одни из самых подробных в рунете
  • Поддержать автора за работу над уроками
  • Обратная связь – сообщить об ошибке в уроке или предложить дополнение по тексту (alex@alexgyver.ru)

Что такое байт/бит и сколько бит в байте?

Описанные ниже единицы измерения информации
используются в компьютерной технике, например, для измерения объема оперативной памяти или объема жестких дисков. Минимальная единица информации называется битом, затем следует байт, ну, а далее уже идут производные от байта: килобайт, мегабайт, гигабайт, терабайт и т.д. Что примечательно, несмотря на приставки кило- , мега- , гига- пересчет этих значений в байт не является задачей, ибо простое умножение на тысячу, миллион или миллиард тут не применимо. Почему? Читайте ниже.

Также схожие единицы используются для измерения скорости передачи информации (например, через интернет-канал) — килобит, мегабит, гигабит и т.д. Так как это скорость, то имеется в виду количество бит (килобит, мегабит, гигабит и т.д.) передаваемых за секунду. Сколько содержится бит в байте и как пересчитать килобайт в килобит? Давайте об этом прямо сейчас и поговорим.

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

Идем дальше. Что же тогда такое байт?
Это уже чуток посложнее. Один байт состоит из восьми бит
(в двоичной системе), каждый из которых представляет из себя двойку в степени (начиная с нулевой и до двойки в седьмой — считается справа налево), как показано на приведенном ниже рисунке:

Также это можно записать как:

11101001

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

Смотрите сами. В нашем примере в одном байте закодировано число 233. Как это можно понять? Просто складываем степени двойки, где стоит единичка (т.е. присутствует сигнал). Тогда получается берем единицу (2 в степени ноль) прибавляем восьмерку (два в степени 3), плюсуем 32 (двойка в пятой степени), плюсуем 64 (в шестой), плюсуем 128 (двойка в седьмой). Итого получает 233 в десятичной системе счисления. Как видите, все очень просто.

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

Но это уже не суть важно

Сколько мегабит в мегабайте?

Давайте еще проясним. Очень часто скорость интернета меряют в килобитах, мегабитах и гигабитах, а, например, программы выдают скорость в килобайтах, мегабайтах… А сколько это будет в байтах? Как перевести мегабиты в мегабайты?
. Тут все просто и без подводных камней. Если в одном байте 8 бит, то в одном килобайте 8 килобит, а в одном мегабайте — 8 мегабит. Все понятно? То же самое и с гигабитами, терабитами и т.д. Обратный перевод осуществляется делением на восемь.

Что такое машинное слово?

Машинное слово — это информация, записанная в ячейку памяти. Оно представляет собой максимальную последовательность единиц информации, которая обрабатывается, как одно целое.

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

Для конкретного компьютера длина слова является неизменной и относится к ряду важнейших характеристик «железа».

Оцените статью
Рейтинг автора
5
Материал подготовил
Андрей Измаилов
Наш эксперт
Написано статей
116
Добавить комментарий