Arduino - побитова аритметикаили операции върху битове

Много програмисти на Arduino се сблъскват с факта, че като параметри на някои функции трябва да изпращате променливи от тип byte (байт). Един байт се състои от 8 бита. Битът е най-малката единица информация в компютърния свят - той може да приема само две стойности - 1 или 0.

В средата на Arduino стойността на байта започва с буквата B и след това стойностите на байта се записват малко по бит:

Също така, когато анализирате байт, се използват концепциите за високи (високи) и ниски (ниски) битове. В нашия пример най-значимият бит е 1 (първият отляво), най-малкият бит е 0 (първият отдясно, последен).

Така например, когато изпълнявате команда за регистъра на микроконтролера DDRD = DDRD B11111100; - две нули в края на байта - ниски битове - отговарят само за 0 ( RX ) и 1 ( TX ) пина на платката Arduino.

Операции върху битове - побитово И ( И )

Побитовият оператор И в C++ е амперсанд & . Правила: резултатът е 1 само ако и двете части на израза са 1, в противен случай резултатът е 0: 0 & 0 == 0 0 & 1 == 0 1 & 0 == 0 1 & 1 == 1

Побитово ИЛИ ( ИЛИ )

Побитовият оператор ИЛИ ( ИЛИ ) в C++ е вертикалната лента. Правила: резултатът е 0 само ако и двете части на израза са 0, в противен случай резултатът е 1: 0 0 == 0 0 1 == 1 1 0 == 1 1 1 == 1

Побитово XOR ( XOR )

Побитовият XOR оператор в C++ е каретката ^. Правила: резултатът е 0 само ако и двете части на израза са равни, в противен случай резултатът е 1: 0 ^ 0 == 0 0 ^ 1 == 1 1 ^ 0 == 1 1 ^ 1 == 0

Побитово НЕ (НЕ)

Побитовият оператор NOT ( NOT ) в C++ е символът тилда

. INразлика от & и , се използва само с един операнд. Той просто обръща битовете.

Операции за изместване на битове

Има само 2 битови операции за изместване - битово изместване наляво и битово изместване надясно >> . Знакът за отместване е последван от число, показващо на колко позиции да се преместят битовете.

Когато един бит се измести наляво, горните битове се губят, а долните се запълват с нули:

Когато един бит се измести надясно, по-ниските битове се губят, а по-високите се запълват с нули:

Операции за присвояване

Всички горепосочени операции (с изключение на побитовата NOT ( NOT )) могат да бъдат записани в кратка форма. Тази техника се използва в случаите, когато при изчисляването на резултата се използва същата променлива, към която ще бъде приписан резултатът:

Манипулации с един бит

Понякога има нужда от точково въздействие върху определен бит от един байт. По-долу са примери за основни операции върху единични битове, използващи операции за преместване на един байт ( 1= B00000001 ).

За да запишете 1 до битово число n (където n = [0, 1, . 7]):

За да запишете нула в бит номер n (където n =[0, 1, . 7]):

(1 // Примерен байт b = B11111111; b &=

Можете да инвертирате бит номер n (където n =[0, 1, . 7]) както следва:

Функции за манипулиране на битове

Ако стандартните функции на Arduino за работа с битове не са доволни от нещо - bit() , bitWrite() , bitSet() , bitClear() , bitRead() или трябва да програмирате индивидуални манипулации с битове, тогава с помощта на стандартни операции можете да приложите всяка битова логика. Например, операцията за обръщане на реда на битовете в байт ще изглежда така:

01Забележка: