|

Operatory binarne

Operatory binarne działają na podstawowej, najmniejszej jednostce informacji cyfrowej, czyli pojedynczym bicie.

Tabela prawdy dla operacji bitowych

abAND a&bOR a|bXOR a^bNOT ~aNAND ~(a&b)
0000011
0101111
1001101
1111000

Operator binarny AND &

Porównując dwa łańcuchy znaków binarnych o takiej samej długości, operator binarny AND zwraca prawdę (wartość 1) dla bitów, które w obu łańcuchach miały wartość 1.

byte val1 = 0b0101;
byte val2 = 0b0011;
byte result = val1 & val2; // wynik 0b1

Sprawdzanie czy liczba jest parzysta / nieparzysta

W liczbie parzystej bit nr 0 wynosi 0, a w nieparzystej 1.

Na liczbie wykonuje się operację bitową AND z liczbą 1. Jeśli wynikiem jest 1 to liczba jest nieparzysta, a jeśli jest 0 to jest parzysta.

Operator binarny OR |

Zwraca wartość 1 wtedy, gdy choć jeden z porównywanych bitów w łańcuchach binarnych ma wartość 1.

byte val1 = 0b0101;
byte val2 = 0b0011;
byte result = val1 | val2; // wynik 0b111

Operator binarny XOR ^

zwraca wartość 1 wtedy, gdy wartości porównywanych bitów w łańcuchach binarnych są różne. [^ kareta]

byte val1 = 0b0101;
byte val2 = 0b0011;
byte result = val1 ^ val2; // wynik 0b110

Operator binarny NOT~

Odwraca wartość pojedynczego łańcucha bitów [~ tylda]

byte val1 = 0b0011;
byte result = ~val1; // wynik 0b1100

Operator binarny  NAND ~& (Not AND)

byte val1 = B11001001;
byte val2 = B01100011;
byte result = ~(val1 & val2);  // wynik 0b10111110

SHIFT << >>

Operator Shift (w uproszczeniu) służy do przesuwania bitów.

Operator Shift zachowuje się inaczej w przypadku liczb dodatnich i ujemnych. Tutaj będziemy się zajmować liczbami dodatnimi, dlatego uznajmy, że podczas przesuwania bitów, dokładane bity będą wypełniane zerami.

MSB (most significant bit) to bit reprezentujący największą wartość (z lewej strony),
LSB (least significant bit) to bit reprezentujący najmniejszą wartość (z prawej strony).

Przykłady przesunięć:

byte val1 = 0b00000011;
Serial.println(val1 << 2,BIN); // wynik: 0b1100
byte val1 = 0b00001001;
Serial.println(val1 >> 3,BIN); // wynik: 0b00000001

Wzór określający wartości liczbowe podczas przesunięć bitowych

n << k = n x 2k

Złączenie dwóch ciągów binarnych w jeden

void setup() {
  Serial.begin(9600);
  byte binary1 = 0b1011;
  byte binary2 = 0b1011;
  byte nowy = (binary1<<4)+binary2;
  Serial.print(nowy,BIN);
}

Podobne wpisy

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *