Jestli to používá dvojkový doplněk, chová se to „rozumně“ při overflow a mám bitovou negaci, tak udělám z toho druhého -číslo tím že přičtu FFFF a invertnu bity a pak to sečtu. Bez bitové negace mě nic nenapadá (kromě opakovaného přičítání FFFF až dojdu do nuly). A sám jsem tohle nikdy nedělal, jenom si matně pamatuju tyhle vlastnosti dvojkového doplňku ze školy.
Jedničkový doplněk menšitele - invertuješ všechny bity, potom z něj uděláš dvojkový doplněk přičtením jedničky a celé to přičteš k menšenci.
Stejně se počítalo na jednodušších mechanických počítačkách, které neměly odčítání. Tam se přičetl devítkový doplněk a jednička, která z něj udělala desítkový.
Pokud ti vyšlo záporné číslo se změtí devítek na začátku, tak jsi ho úplně stejným postupem odečetl od nuly, čímž ti vyšla jeho absolutní hodnota.
V nejhorsim (musim ale mit taky operaci porovnani):
odecitam a - b (predpokaldam ze a > b)
p1=b, p2=0
while p1 > a : p1++, p2++
return p2
Da se to asi zrychlit tak ze si pripravim mocniny dvojky a budu je zkouset pricitat od nejvetsi (tj. pro kazdy bit otestuju jestli ma ve vysledku byt nastaveny), ve stylu
p1=b, p2=0
...
if p1+256 <= a: p1+=256, p2+=256
if p1+128 <= a: p1+=128, p2+=128
...
if p1+1 <=a: p1+=1, p2+=1
return p2
A podobne se da udelat deleni kdyz znam jenom nasobeni (a scitani),
odmocnovani kdyz znam jenom umocnovani (a nasoveni a scitani)
i vsechny dalsi inverze sipkovych operatoru