Aditivní kódování
Aditivní kódování (také kódování s posunutou nulou) je označení pro způsob, kterým jsou kódovány některé datové typy pro reprezentaci celých čísel. Je alternativou k jiným integerovým datovým typům podporujícím záporná čísla, například k dvojkovému doplňku. Záporná čísla jsou v aditivním kódování ukládána s přičtením takové konstanty, aby nejnižší reprezentovatelné záporné číslo odpovídalo nule, a následně je využita obvyklá metoda reprezentace nezáporných čísel.
Hodnota této konstanty, označovaná také posun (případně ofset nebo anglicky bias), je pro datové typy o n bitech volena obvykle , tedy v dvojkovém zápise odpovídá nule zápis s nejvýznamnějším bitem jedničkovým a ostatními nulovými a největšímu reprezentovatelnému číslu odpovídá zápis se samými jedničkami. Při této volbě je snadný převod mezi aditivním kódováním a dvojkovým doplňkem změnou nejvýznamnějšího bitu.
Mezi výhody aditivního kódování patří skutečnost, že posun kromě slučitelnosti s sčítáním a odčítáním také zachovává uspořádání, tedy pro vyhodnocení nerovnosti čísel v aditivní notaci lze přímo použít srovnávání naprogramované pro nezáporná čísla v obvyklém dvojkovém kódování.
Historicky významným příkladem aditivního kódování je Stibitzův kód používaný v historických počítačích, který je na čtyřech bitech s posunem tři. Aktuálním případem používání jsou mnohé formáty čísel s pohyblivou řádovou čárkou, kde je aditivní kódování používáno pro uložení exponentu: Takto ukládá exponent standard IEEE 754.
Následující tabulka uvádí příklad pro čtyřbitová čísla:
Desítkový zápis | Aditivní kódování s posunem 8 | Dvojkový doplněk |
---|---|---|
7 | 1111 | 0111 |
6 | 1110 | 0110 |
5 | 1101 | 0101 |
4 | 1100 | 0100 |
3 | 1011 | 0011 |
2 | 1010 | 0010 |
1 | 1001 | 0001 |
0 | 1000 | 0000 |
−1 | 0111 | 1111 |
−2 | 0110 | 1110 |
−3 | 0101 | 1101 |
−4 | 0100 | 1100 |
−5 | 0011 | 1011 |
−6 | 0010 | 1010 |
−7 | 0001 | 1001 |
−8 | 0000 | 1000 |