Operatory binarne działają na podstawowej, najmniejszej jednostce informacji cyfrowej, czyli pojedynczym bicie.
Tabela prawdy dla operacji bitowych
| a | b | AND a&b | OR a|b | XOR a^b | NOT ~a | NAND ~(a&b) |
| 0 | 0 | 0 | 0 | 0 | 1 | 1 |
| 0 | 1 | 0 | 1 | 1 | 1 | 1 |
| 1 | 0 | 0 | 1 | 1 | 0 | 1 |
| 1 | 1 | 1 | 1 | 0 | 0 | 0 |
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 0b1Sprawdzanie 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 0b111Operator 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 0b110Operator binarny NOT~
Odwraca wartość pojedynczego łańcucha bitów [~ tylda]
byte val1 = 0b0011;
byte result = ~val1; // wynik 0b1100Operator binarny NAND ~& (Not AND)
byte val1 = B11001001;
byte val2 = B01100011;
byte result = ~(val1 & val2); // wynik 0b10111110SHIFT << >>
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: 0b1100byte val1 = 0b00001001;
Serial.println(val1 >> 3,BIN); // wynik: 0b00000001Wzó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);
}