Praktické ukázky bitových operací v C
- May 20 2014
- Teorie
- 3646x Přečteno
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