Hogyan végzem el két binári szám külömbségét?
Nem tudom megoldani a digitális architekturák házifeladatot és egész nap szenvedek vele...
15-37
Kikötés: csak a következő bináris műveletek használhatók: invertálás, összeadás.
Az én eredményem 101010
Ugy csináltam, hogy átalakitottam a 2 számos bináris formátumba, majd vettem a kivonandó kettes komplemensét (nullákat egyre cseréltem, illetve az egyeket nullára majd hozzáadtam egyet) és hozzáadtam a kissebitendőhöz:
Levezetve:
A 15 binárisan: 1111
A 37 binárisan: 100101
A 100101 kettes komplemense: 011011!
Majd az igy kapott számot összeadtam a kissebitendővel.
Azaz: 011011
+ 1111
Ami: 101010
Kérdés, hogy jó-e vagy elrontok valamit?
A számok, eredmények és a módszer is jó, de egy dolgot elfelejtettél:
6 biten a 100101 nem 37 hanem -27 ha jól számolom. (ha az első bit 1 akkor az negatív)
6 biten -32 és +31 között tudod csak ábrázolni a számokat. Ebből adódóan a 37 miatt legalább 7 bitet kell használni (de inkább 8-at).
Amikor invertálsz vedd figyelembe a 0-kat a szám elején:
(-37) = inv(100101) = inv(00100101) = 11011011
Jól csinálod.
A kisebbítendőt és a kivonandót átalakítod bináris számmá,
a kivonandó kettes komplemensét képzed: invertálod és hozzáadsz egyet
majd összeadod a kettőt.
Itt egy példaprogram C-ben:
Nálam a 37 decimális szám binéris számmá való átalakitása igy néz ki:
37 | 1
18 | 0
9 | 1
4 | 0
2 | 0
1 | 1
Ami: 100101
#3:
Itt a problémát láthatólag nem a számok binárissá alakítása jelenti, hanem az, hogy az eredmény is mínusz szám, tehát egy kettes komplemens. Ha ezt „visszacsinálod”, pozitív számként megkapod a különbséget, amit már könnyen visszaszámolhatsz decimálisra -- és persze közben nem felejted el, hogy ez nem maga az eredmény, hanem annak a negatívja.
#3: Jézusmária, eddig eszembe sem jutott, hogy már a binárisra való átírással is bajok lehetnek, és tényleg odapillantsak az átalakításod módszerére:
37 | 1
18 | 0
9 | 1
4 | 0
2 | 0
1 | 1
Mi vaaan?
9, 18, 37, mint helyiértékek? Honnan s búbánatból szoptad ezeket? Szerinted miféle szám hatványai? És, ha már elfogadom, hogy létezik decimálisan leírva 37 értékű bináris helyiérték (ebben a nemlétező esetben ott csakugyan 1 állna), akkor miért nem 0 az összes többi? Minek még hozzáadni bármit, ha már 37?
Ha összeadom az átalad kiagyalt furcsaságot, eléggé érdekes egyenlőség jön ki:
1*37 + 0*18 + 1*9 + 0*4 + 0*2 + 1*1 (vagyis 37+9+1) = 47
Magyarán: Szerinted 37 = 47
Javaslom, hogy egyelőre ezt a részét értsd meg, bravúrstiklikkel ráérsz akkor is foglalkozni, ha már a számrendszerek közti átváltás megy.
valójában az a módszere hogy ha a szám páros akkor 0-t, ha páratlan akkor 1-t ír, utána "elfelezi" a számot. A bal oldalon nem a helyiértékek, hanem a részeredmények állnak.
Van ahol így alakítanak binárisba (vagy legalábbis kb így, ilyesmi lépések vannak benne). A konkrét példán jó eredményt ad (fejjel lefele nézd az eredményt).
Na jó, igazatok van, Kérdezőnek meg különösen, aki nemhogy nem hibázott, hanem a tananyag alapján kifogástalanul oldotta meg az átalakítást. Elnézést.
A két számoszlop látványa ettől függetlenül sokkolt egy kissé, még mindig nem tértem magamhoz... Ha én is ezt a szellemesen egyszerű maradékszámításos módszert tanultam volna, valószínűleg a mai napig nem tudnám, hogy miért pont ott vannak az egyesek és a nullák, azon kívül, hogy a számolás közben oda kerülnek. Rémes.
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!