Hirdetés
- Elkezdte felszámolni a GPU-s PhysX támogatását az NVIDIA
- OLED monitor topic
- Milyen egeret válasszak?
- Apple asztali gépek
- Videós, mozgóképes topik
- Intel Core i3 / i5 / i7 / i9 10xxx "Comet Lake" és i3 / i5 / i7 / i9 11xxx "Rocket Lake" (LGA1200)
- Hobby elektronika
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- NVIDIA GeForce RTX 4060 / 4070 S/Ti/TiS (AD104/103)
- 3D nyomtatás
Új hozzászólás Aktív témák
-
válasz
t.timikee #196 üzenetére
Hali!
Szóval, az elején szögezzük le, hogy ebben a formában a feladat megoldása értelmetlen, azt is leírom majd a későbbiekben, hogy miért.
Nagyon fontos szabály, hogy egy feladat EGYÉRTELMŰEN ÉRTELMEZHETŐ legyen ill különböző módszerekkel történő megoldása esetén is AZONOS EREDMÉNY jöjjön ki.
Tehát értelmezzük a feladatot.
Bemenő adatok: V1,V2(eax,ebx) 32 bites egész
módosított adat: al regiszter ami 1 vagy 0, 8bites egész számAL=(V1 minden bitje >= V2 megfelelő bitje)?1:0
Ez egy feltételes értékadás c/c++-ban, magyarul ha a feltétel IGAZ(V1 minden bitje >= V2 megfelelő bitje), akkor AL=1, ha a feltétel HAMIS, akkor AL=0a "minden bitje" vs. "megfeleő bitje" azt jelenti, hogy az első változó(V1->eax) minden bitjét(32 bit), össze kell hasonlítani a második változó(V2->ebx) minden, azonos helyiértékű bitjével.
A legmagasabb helyiértékű bit(32 bites szám esetén) 31, a legkisebb meg 0.
Tehát a feladat, hogy eax 31. helyiértékű bitjét hasonlítsuk össze ebx 31. helyiértékű bitjével, aztán a 30.-kat a 30.-kal, egészen míg el nem jutunk eax 0. helyiértékű bitjének ebx 0. helyiértékű bitjével való összehasonlításig.Mivel kettes(bináris) számrendszerről beszélünk a bit értéke 0(alacsony) vagy 1(magas) lehet. Tehát az azonos helyiértékű bitek összehasonlításakor 4 eset állhat fenn.
0 és 0, 0 és 1, 1 és 0, 1 és 1.
Most helyettesítsük be a feltételbe, eax adott bitje >= ebx eax-szel azonos helyiértékű bitje
0 és 0 esetén IGAZ, mert egyenlő
0 és 1 esetén IGAZ, mert nagyobb
1 és 0 esetén HAMIS, mert kisebb
1 és 1 esetén IGAZ, mert egyenlőMost pedig jöjjön, hogy miért is értelmetlen a feladat megoldása.
Két módszer amit alkalmazhatunk, hogy vagy 31. bittől megyünk a 0. bit írányába(balról jobbra) vagy a 0. bittől megyünk a 31. bit írányába(jobbról balra). DE, elöbbi esetben teljesen felesleges a 31-től 1. bitek összehasonlítása hiszen az utolsó 0. helyiértékü bit összehasonlításakor veszi vel a végleges értékét AL. Az utóbbiban meg teljesen felesleges a 0-tól 30. bitek összehasonlítása hiszen az utolsó 31. helyiértékü bit összehasonlításakor veszi vel a végleges értékét AL. Nem is beszélve arról, hogy a két módszer két különböző eredményt ad ill. adhat.
Na ezért értelmetlen a feladat megoldása.A feladatot aki feladta, nagy valószínüséggel az volt a szándéka, hogy gyakoroljátok a bitműveleteket, a fenti lehetőség fel sem merült benne.
A feladatot többféleképpen lehet "értelmessé" tenni. Én azt választottam, hogy megszámoljuk hányszor lesz igaz ill hamis a feltétel a bitművelet során, ha az igaz a több akkor AL=1, ha a hamis akkor AL=0, ha meg egyenlő akkor AL=-1.
Itt annyit azért még hozzáfűznék hogy hamis kevesebbszer fordul elő(mint ahogy feljebb látszik), ezért a >= relációt modosítani kellen egyenlőre, így 0 és 1 esetén is hamis lenne.Várom válaszod, megjegyzésed, kérdésed stb.
Ha minden tiszta és a módosítással is egyetértesz, akkor megcsinálom a kódót is.Fire.