Reprezentado de negativaj entjeraj nombroj

La matematiko kutime reprezentas negativajn nombrojn metante minus-signon ("-") antaux la absolutan valoron. Ekzemple la negativajxo de "15" estas "-15". Tiu metodo havas la avantagxon, ke la negativigo estas ekstreme simpla operacio; oni aldonas aux forprenas la minus-signon.

En komputado oni povus uzi la saman metodon, reprezentante la minus-signon per speciala bito, la signuma bito. Tia reprezento nomigxas signuma-absolutvalora reprezento. Gxi havas gravan malavantagxon: Kalkulante per gxi oni devas aparte trakti negativajn kaj pozitivajn nombrojn. Ekzemple ne eblas uzi la saman algoritmon por adicii du pozitivajn aux unu pozitivan kaj unu negativan nombrojn.

Tial oni kutime uzas komplementan reprezenton, kiu uzas la diferencon al fiksa nombro M (la "komplementon gxis M") por negativigi. Obloj de M estas ignorataj en cxiuj rezultoj. Tiun nombron M oni elektas tiel, ke la komplementigo estas facile farebla. Por ekzemplo kun dekumaj nombroj ni uzu M = 100:

Ekzemplo:

Nombroj pli grandaj al M ne estas tiel reprezenteblaj, kaj cxe la aliaj nombroj necesas decidi, cxu ili havu pozitivan aux negativan signifon. Kutime oni duonigas la aron 0..M-1 kaj difinas, ke la nombroj 0..M/2-1 estu pozitivaj kaj M/2..M-1 negativaj. (Kutime M estas para.) En la ekzemplo la nombroj 0..99 do havus jenajn signifojn:
0 0
1 1
.. ..
49 49
50-50
51-49
52-48
.. ..
98 -2
99 -1

Duuma reprezento

Cxar komputiloj kutime uzas duumajn nombrosistemojn, ili uzas potencojn de 2 kiel M, normale la unuan nombron ne reprezenteblan per la disponeblaj bitoj. La sekva tabelo montras M por kelkaj ekzemploj, kiuj estas normigitaj de IEEE, la Usona Instituto de Elektra kaj Elektronika Ingxenieriko:
bitojMplej malgranda nombro plej granda nombro
16 65.536 -32.768 32.767
32 4.294.967.296 -2.147.483.648 2.147.483.647
64 18.446.744.065.519.682.688 -9.223.372.032.759.841.344 9.223.372.032.759.841.343

Mallonge oni parolas pri komplemento gxis 2 anstataux "komplemento gxis la n-a potenco de 2". La komplemento gxis 2 estas facile kalkulebla: Oni subtrahas 1 kaj inversigas cxiujn bitojn. Ekzemplojn por n=8, do M=256, montras jena tabelo:
nombro
(dekume)
interrezulto
(|x| - 1)
(dekume)
interrezulto
(|x| - 1)
(duume)
fina rezulto
-1 0 0000 0000 1111 1111
-2 1 0000 0001 1111 1110
-3 2 0000 0010 1111 1101
-127 126 0111 1110 1000 0001
-128 127 0111 1111 1000 0000

Videblas, ke la unua bito de cxiu negativa nombro estas 1 kaj la unua bito de cxiu pozitiva nombro estas 0. La unua bito estas do uzebla kiel signuma bito, kaj por testi la negativecon de nombro suficxas rigardi al tiu bito.

Ekzemplo de duuma kalkulado

dekume     duume
-3 + 1 = -2 1111 1101 + 0000 0001 = 1111 1110
-2 + 1 = -1 1111 1110 + 0000 0001 = 1111 1111
-1 + 1 = 0 1111 1111 + 0000 0001 = (1) 0000 0000 *)
0 + 1 = 2 0000 0000 + 0000 0001 = 0000 0001
1 + 1 = 2 0000 0001 + 0000 0001 = 0000 0010
*) La maldekstra 1 estas "malprunto", kiu egalvaloras al M=256 kaj do estas ignorata.

Komplemento gxis unu

Se oni ne subtrahas 1 antaux la inversigo de la bitoj, oni uzas la "komplementon al unu", en kiu la negativaj nombroj estas komplementoj al M-1. Kvankam la komplemento al unu estas iom pli facile kalkulebla, gxi ne estas kutime uzata. Gxia precipa malavantagxo estas, ke la nombro 0 havas du malsamajn reprezentojn, nome "0" kaj "M-1". Versxajne pro tiu "duobla nulo" IEEE decidis malfavore al la komplemento al unu.