Leírható az összeadás bitenkénti műveletekkel rekurzió és ciklusok nélkül?
Az a és b a bemenet c a kimenet és a szokásos módon értelmezett bitműveletek 8 bitig összead fixpontos (nemnegatív) számokon :
c|=((a&1)^(b&1)^atvitel)
atvitel=((a&1)&(b&1))|((a&1)&atvitel)|((b&1)&atvitel)
c|=(((a>>1)&1)^((b>>1)&1)^atvitel)<<1
atvitel=(((a>>1)&1)&((b>>1)&1))|(((a>>1)&1)&atvitel)|(((b>>1)&1)&atvitel)
c|=(((a>>2)&1)^((b>>2)&1)^atvitel)<<2
atvitel=(((a>>2)&1)&((b>>2)&1))|(((a>>2)&1)&atvitel)|(((b>>2)&1)&atvitel)
c|=(((a>>3)&1)^((b>>3)&1)^atvitel)<<3
atvitel=(((a>>3)&1)&((b>>3)&1))|(((a>>3)&1)&atvitel)|(((b>>3)&1)&atvitel)
c|=(((a>>4)&1)^((b>>4)&1)^atvitel)<<4
atvitel=(((a>>4)&1)&((b>>4)&1))|(((a>>4)&1)&atvitel)|(((b>>4)&1)&atvitel)
c|=(((a>>5)&1)^((b>>5)&1)^atvitel)<<5
atvitel=(((a>>5)&1)&((b>>5)&1))|(((a>>5)&1)&atvitel)|(((b>>5)&1)&atvitel)
c|=(((a>>6)&1)^((b>>6)&1)^atvitel)<<6
atvitel=(((a>>6)&1)&((b>>6)&1))|(((a>>6)&1)&atvitel)|(((b>>6)&1)&atvitel)
c|=(((a>>7)&1)^((b>>7)&1)^atvitel)<<7
atvitel=(((a>>7)&1)&((b>>7)&1))|(((a>>7)&1)&atvitel)|(((b>>7)&1)&atvitel)
C-ben : pastebin.com (per) ywLZxHJD
Bocsi inicializálás első 2 sor lemaradt:
Vagyis az egész:
c=0
atvitel=0
c|=((a&1)^(b&1)^atvitel)
atvitel=((a&1)&(b&1))|((a&1)&atvitel)|((b&1)&atvitel)
c|=(((a>>1)&1)^((b>>1)&1)^atvitel)<<1
atvitel=(((a>>1)&1)&((b>>1)&1))|(((a>>1)&1)&atvitel)|(((b>>1)&1)&atvitel)
c|=(((a>>2)&1)^((b>>2)&1)^atvitel)<<2
atvitel=(((a>>2)&1)&((b>>2)&1))|(((a>>2)&1)&atvitel)|(((b>>2)&1)&atvitel)
c|=(((a>>3)&1)^((b>>3)&1)^atvitel)<<3
atvitel=(((a>>3)&1)&((b>>3)&1))|(((a>>3)&1)&atvitel)|(((b>>3)&1)&atvitel)
c|=(((a>>4)&1)^((b>>4)&1)^atvitel)<<4
atvitel=(((a>>4)&1)&((b>>4)&1))|(((a>>4)&1)&atvitel)|(((b>>4)&1)&atvitel)
c|=(((a>>5)&1)^((b>>5)&1)^atvitel)<<5
atvitel=(((a>>5)&1)&((b>>5)&1))|(((a>>5)&1)&atvitel)|(((b>>5)&1)&atvitel)
c|=(((a>>6)&1)^((b>>6)&1)^atvitel)<<6
atvitel=(((a>>6)&1)&((b>>6)&1))|(((a>>6)&1)&atvitel)|(((b>>6)&1)&atvitel)
c|=(((a>>7)&1)^((b>>7)&1)^atvitel)<<7
atvitel=(((a>>7)&1)&((b>>7)&1))|(((a>>7)&1)&atvitel)|(((b>>7)&1)&atvitel)
Igen. Ezt használjuk elég gyakran. Egész és fixpontos esetben az elv, hogy az XOR művelet (kizáró vagy) az ún. fél összeadás. Ehhez kell egy átvitelt képezni és megvan az összadás.
Ld: 1011+0110 esetén a következő minta 0+1=1, 1+1=0 és keletkezik 1 átvitel, 0+1=1 de itt még hozzá kell adni az előző bitről jövő átvitelt 1+1=0 és keletkezik 1 átvitel. A 4.biten 1+0=1 és hozzá adva az előző átvitelt 1+1=0 és keletkezik 1 átvitel. Azaz az eredmény:
0001 (és 1 átvitel ami itt tulcsordulást fog jelenteni).
Az az eredmény (1)0001 lesz.
Ez bitenként: Y=(A XOR B) XOR (C-1) ahol (C-1) az "előző bit átvitele). És az átvitel C=(A AND B) OR (A AND C) OR (B AND C)
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!