Přeskočit na hlavní obsah

Bitové operace

Bitové operace pracují s jednotlivými bity. Každý bit má hodnotu 0 nebo 1.

Přehled základních operací:

Používáme značky, které se běžně objevují i při zápisu bitových operací:

operaceznačkamatematický pohled
negace~Akaždý bit se obrátí
ANDA & Bbitové násobení
ORA | Bbitový součet
XORA ^ Bbitový součet bez přenosu

U běžného sčítání může vzniknout přenos do dalšího řádu. U bitového OR nebo XOR počítáme každý bit zvlášť. Žádný přenos do sousedního bitu se neřeší.

Negace

Negace obrátí hodnotu. Z nuly udělá jedničku a z jedničky udělá nulu.

A = 0
~A = 1
A = 1
~A = 0

U vícebitové hodnoty se stejná operace provede nad každým bitem zvlášť. Proto se z 1010 1101 stane 0101 0010.

Negace po bitech

A
10101101
~A
01010010

Každá nula se změní na jedničku a každá jednička na nulu.

AND

Operace AND dá 1 jen tehdy, když jsou obě hodnoty 1.

A = 0B = 0
A & B = 0
A = 0B = 1
A & B = 0
A = 1B = 0
A & B = 0
A = 1B = 1
A & B = 1

AND se dá chápat jako bitové násobení. Pro jeden bit platí: 0 * 0 = 0, 0 * 1 = 0, 1 * 0 = 0 a 1 * 1 = 1.

Stejně se chová &. Proto dá jedničku jen tehdy, když jsou obě vstupní hodnoty jedničky.

AND se také používá jako výběr. Tam, kde má druhá hodnota 1, se původní bit zachová. Tam, kde má druhá hodnota 0, výsledek bude 0.

AND po bitech

A
10101101
B
00001111
A & B
00001101

Výsledek má jedničku jen tam, kde ji mají oba řádky.

OR

Operace OR dá 1, když je 1 alespoň jedna z hodnot.

A = 0B = 0
A | B = 0
A = 0B = 1
A | B = 1
A = 1B = 0
A | B = 1
A = 1B = 1
A | B = 1

OR se dá chápat jako bitový součet, ve kterém stačí, aby byla jednička aspoň na jedné straně. Když je na některém místě jednička aspoň v jednom vstupu, ve výsledku bude také jednička.

Pozor: není to běžné sčítání s přenosem. Pořád počítáme každý bit zvlášť.

OR po bitech

A
10101101
B
00010000
A | B
10111101

Jednička ve druhém řádku zvedne odpovídající bit ve výsledku.

XOR

Operace XOR dá 1, když jsou hodnoty různé.

A = 0B = 0
A ^ B = 0
A = 0B = 1
A ^ B = 1
A = 1B = 0
A ^ B = 1
A = 1B = 1
A ^ B = 0

XOR se dá chápat jako bitový součet bez přenosu. Když se sečte 1 a 1, výsledek na tomto bitu je 0, protože dvojka by se v běžném sčítání přenesla do vyššího řádu. XOR ale žádný přenos neukládá.

XOR se také dá chápat jako přepnutí. Když je druhý bit 1, první bit se obrátí. Když je druhý bit 0, první bit zůstane.

XOR po bitech

A
10101101
B
00001111
A ^ B
10100010

Tam, kde je ve druhém řádku jednička, se bit přepne.

Bitový posun

Bity můžeme posouvat doleva nebo doprava.

Posun doleva o jedno místo odpovídá u nezáporných celých čísel násobení dvěma. Posun doprava o jedno místo odpovídá dělení dvěma se zaokrouhlením dolů.

zápisdesítkově
0b000000011
0b000000102
0b000001004
0b000010008

Posun doprava

před
10101100
po
00101011

Posun o dvě místa doprava zahodí dva pravé bity a zleva doplní nuly.

Bity mohou zmizet

Při posunu se číslo nevejde nekonečně daleko. Bity, které se posunou za okraj, se ztratí.

Například při posunu 1010 1100 doprava o dvě místa zmizí dva pravé bity.

V embedded programování se stejné operace používají hlavně při ovládání registrů.

Shrnutí operací

cílmatematickyco se stane
obrátit bity~A0 se změní na 1, 1 na 0
bitové násobeníA & Bjednička vznikne jen z dvojice 1 a 1
bitový součetA | Bstačí jednička na jedné straně
bitový součet bez přenosuA ^ Bjednička vznikne, když jsou bity různé