True table for bit operators
A | B | NOT ~A |
AND A & B |
OR A | B |
NOR ~(A | B) |
NAND ~(A & B) |
XOR A ^ B |
---|---|---|---|---|---|---|---|
0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 |
0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 |
1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 |
1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 |
Operator AND &
Zwraca 1, jeśli obie wartości wynoszą 1.
Operator OR |
Zwraca 1, jeśli choć jedna z wartości wynosi 1.
Operator NAND ~&
Operator NAND ~(A&B) zwraca 1, jeśli przynajmniej jeden z bitów wejściowych wynosi 0.
Ponieważ NAND jest bramą uniwersalną, można z niej zbudować każdą inną bramę logiczną.
void setup() {
Serial.begin(115200);
byte A = 0b11001100;
byte B = 0b01101010;
byte result = ~(A & B);
Serial.println(result,BIN);
// 10110111
}
void loop() {}
Operator XOR ^
Zwraca wartość 1 wtedy, gdy wartości porównywanych bitów w łańcuchach binarnych są różne. [^ kareta]
void setup() {
Serial.begin(115200);
byte val1 = 0b11011101;
byte val2 = 0b01010011;
byte result = val1 ^ val2;
Serial.println(result,BIN);
// 10001110
}
void loop(){
}
int ledPin = 8;
int ledState = 0;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
ledState ^= 1;
digitalWrite(ledPin, ledState);
delay(500);
}
int flag = 0b00000000;
void setup() {
DDRB = 0b11111111;
}
void loop(){
flag ^= 0b00000101;
PORTB = flag;
delay(500);
}