Bitműveletekről van szó. Egyszerűen nemtudom, hogy az egyes bit indexeken lévő számokat hogy lehet összeadni C nyelvben? Egy feladathoz kellene! Köszönöm a segítséget!
Figyelt kérdés
A feladat így szól:
1.) Írj olyan eljárást, ami két paraméterül kapott unsigned int típusú szám közül a képernyőre írja azt, amelyiknek bináris alakjában kevesebb egyes szerepel. Ha azonos az egyesek száma, akkor az elsőt adja vissza.
2010. dec. 13. 14:28
1/5 anonim válasza:
Az unsigned int az egy könnyítés, minden szám nemnegatív.
Egy ötlet: ha átváltás nélkül megszorzod kettővel, és a felső biten 1 volt, akkor túl kell csorduljon, vagyis kisebb lesz az eredetinél. Ezt ciklusban ismételve lehet vizsgálni, hány egyes volt.
2/5 anonim válasza:
Ugyanez fordítva: felezgeted, és megnézed, a fele páratlan-e, vagyis a legkisebb helyiértékű bitre hányszor került 1.
3/5 anonim válasza:
Nagyon egyszerű a dolog.
unsigned szam = 12;
int sum = 0;
while(0 != szam)
{
sum += szam%2;
szam >>= 1;
}
4/5 A kérdező kommentje:
tehát ha unsigned inttel deklarálok adok meg egy számot, azt a program már bináris számként kezeli? tehát itt az unsigned szam = 12 egyenlő a 1100? és külön értelmezi az összes számjegyet? :(
2010. dec. 13. 15:25
5/5 anonim válasza:
Nem és igen. Ha deklarálsz egy BÁRMIT, annak lesz bináris alakja, mivel a számítógép csak úgy tudja kezelni. De ezt az alakot nem éred el, nem tudod indexelni, hogy szam[i] az i. bit. Az egyes biteket csak bitműveletekkel tudod elérni. Ilyen az és (&), a vagy (|), a kizáró vagy (^) és a negálás (~). És ilyenek a léptetések (>> és <<), ezek mind a bitalakjával foglalkoznak a változónak. Amit írtam kódot az annyit csinál, hogy megvizsgálja az utolsó bit értékét (modulo 2, %2, ez ugye 1, ha páratlan, és 0 ha páros, kettes számrendszerben ez pont az utolsó számjegy 1 vagy 0 voltát jelenti), és utána lépteti jobbra, azaz a legjobboldali számjegy kiesik, a többi meg közelebb lép eggyel jobbra. Egy idő után 0 lesz a szám értéke, mert minden 1 bit kiment, és közben megszámoltuk őket.
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
A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!