Hogy lehet a szorzást bináris művelettáblákkal és átvitelekkel kifejezni?
Vegyük először az összeadást, az egyszerűbb. Jelentse a + operátor a következőt:
+(0;0) = +(1;1) = 0,
+(1;0) = +(0;1) = 1,
akárcsak a kizáró-vagynál, viszont van olyan, hogy átvitel, amit jelöljünk @+-szal:
@+(0;0) = @+(0;1) = @+(1;0) = 0
@+(1;1) = 1
És a + b := +(a;b) xor (2 * @+(a;b)) = a xor b xor (2 * (a and b)). Ez kiterjeszthető több bitből álló számokra is (bitsorozat), viszont a szorzással mi van? Az is ilyen szépen művelettáblába fejthető?
Mit gondolsz, a számítógép hogyan számol?
Logikai kapukkal. Vagyis az aritmetikai műveletek is logikai műveletekre vannak visszavezetve.
A + B bitek összeadása egy CD kétbites számot eredményez (mert ugye 1+1 = 10). Ekkora C=A&B, D = A xor B. Ennyi. A szorzást pedig kb. úgy csinálják, mint ahogy papíron tanultuk az iskolában. Annyival egyszerűbb a dolog, hogy a szorzó bitjei csak 0 vagy 1 értéket hordozhatnak, tehát pl
ABCDE * 01101
-----
00000ABCDE
0000000000
000ABCDE00
00ABCDE000
0000000000
Aztán összeadni a sorokat. Az egész 3 órajelből is megoldható.
Az általános iskolában megtanult szorzás - jelen esetben bináris reprezentáltakkal - tartalmaz egy szumma operátort:
a * b = sum k=0-tól n-ig a >> (k * b[k]),
ahol n b számjegyeinek száma, >> a biteltolás, b[k] a b bináris szám k. számjegye (0.-tól sorszámozva).
Ezt az iterációt szeretném kettő vagy három művelettáblázattal helyettesíteni... vagy legalább a szummától megszabadulni. Létezik a fentinél hatékonyabb módszer?
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!