Dělají Vám problémy bitové operace (OR, AND, XOR, bitový komplement) a nevíte jaký výsledek z toho vyjde? Pak si přečtěte následující článek, který snad objasní vaše tápání + přidá několik vzorových příkladů.
operátor | – bitový OR
pravdivostní tabulka hradla OR
A | B || Y
————
0 | 0 || 0
0 | 1 || 1
1 | 0 || 1
1 | 1 || 1
A = 0x0F
B = 0x0C
Y = (A | B)
Y = 0x0F
0b00001111 – A
0b00001100 – B
—————-
0b00001111 – výsledek OR
operátor & – bitový AND
pravdivostní tabulka hradla AND
A | B || Y
————
0 | 0 || 0
0 | 1 || 0
1 | 0 || 0
1 | 1 || 1
A = 0x0F
B = 0x0C
Y = (A & B)
Y = 0x0C
0b00001111 – A
0b00001100 – B
—————-
0b00001100 – výsledek AND
operátor ^ – bitový exclusive OR (XOR)
pravdivostní tabulka hradla XOR
A | B || Y
————
0 | 0 || 0
0 | 1 || 1
1 | 0 || 1
1 | 1 || 0
Y = 0x00
A = 0x0F
B = 0x0C
Y ^= (A | B) –nejprve se provede bitový OR mezi A a B (viz výše) a poté se provede XOR s Y
Y = 0x0F
0b00001111 – A
0b00001100 – B
—————-
0b00001111 – výsledek OR
0b00000000 – Y
—————-
0b00001111 – výsledek XOR
Y = 0x00
A = 0x0F
B = 0x0C
Y ^= (A & B) –nejprve se provede bitový AND mezi A a B (viz výše) a poté se provede XOR s Y
Y = 0x0C
0b00001111 – A
0b00001100 – B
————————-
0b00001100 – výsledek OR
0b00000000 – Y
————————-
0b00001100 – výsledek XOR
operátor ~ – bitový komplement
tabulka pro bitový komplement
A || Y
————
0 || 1
1 || 0
Y = 0x00
A = 0x0F
B = 0x0C
Y = ~(A | B) –nejprve se provede bitový OR mezi A a B (viz výše) a poté se provede bitový komplement s Y
Y = 0xF0
0b00001111 – A
0b00001100 – B
—————-
0b00001111 – výsledek OR
0b00000000 – Y
—————-
0b11110000 – výsledek bitový komplement
Y = 0x00
A = 0x0F
B = 0x0C
Y = ~(A & B) –nejprve se provede bitový AND mezi A a B (viz výše) a poté se provede bitový komplement s Y
Y = 0xF3
0b00001111 – A
0b00001100 – B
—————-
0b00001100 – výsledek AND
0b00000000 – Y
—————-
0b11110011 – výsledek bitový komplement
Bitový posun << >> – vlevo/vpravo
Y = 0x0F >> 2 –bitový posun vpravo
Y= 0x03
0b00001111 – 0x0F
0b00000011 – výsledek posunu vpravo
Y = 0x0F >> 2 –bitový posun vlevo
Y = 0x3C
0b00001111 – 0x0F
0b00111100 – výsledek posunu vlevo
Další příklady:
Y = 0x0C
Y &= 0x0F –> Y = 0x0C & 0x0F
Y = 0x0C
0b00001111 – 0x0F
0b00001100 – 0x0C
—————-
0b00001100 – výsledek AND
Y = 0x00
Y ^= ~0x0F –> nejprve se zneguje 0x0F na 0xF0 a poté se provede bitový XOR tedy:
Y = 0xF0
0b00001111 – 0x0F
—————-
0b11110000 – výsledek bitový komplement
0b00000000 – Y
—————-
0b11110000 – výsledek XOR