Tizes számrendszerbeli szám számjegyeinek felcserélése bitműveletekkel hogyan?
Kizárólag bitműveletek alkalmazásával felcserélhetőek egy tetszőleges tizes számrendszerbeli pozitív szám számjegyei?
Mennyire bonyolult ezt megvalósítani, mi lenne az algoritmus?
Kettes számrendszerbe konvertálás nélkül, kizárólag bitműveletek végrehajtásával érdekelne a dolog.
15=51
159=951 stb
Ilyenre gondolok.
Persze, hogy felcserélhetők bitműveletekkel.
Mi lenne az akadálya ennek?
Például Pascal-ban szeetném megoldani, de sajnos ötletem sincs. :-(
program szamcsere;
var
szam1, szam2 : longint;
begin
Write('Kerem a szamot : ');
ReadLn(szam1);
hogyan tovább?
end.
Mi történik mondjuk egy kétjegyű szám számjegyeinek felcserélése során?
[15] = 1*10 + 5*1 → 5*10 + 1*1 = [51]
[ab] = 10a + b
[ba] = 10b + a = [ab] + 9b - 9a
Hát ezt a (9b - 9a)-t bajos lesz [ab]-ből kifejezni bináris műveletekkel.
~ ~ ~
Vegyük mondjuk a 97-et:
97 = 0110 0001
90 = 0101 1010
07 = 0000 0111
Megfordítva 79:
79 = 0100 1111
70 = 0100 0110
09 = 0000 1001
Tehát a 0110 0001 (97)-ből kellene valahogy kihámozni a 0101 1010 (90)-t, abból 000 1001 (09)-et csinálni, illetve ki kellene hámozni a 0000 0111 (07)-et, és abból meg 0100 0110 (70)-et csinálni, majd összeadni.
~ ~ ~
Nem, ez ciklus és/vagy feltételvizsgálat és/vagy segédtáblák nélkül, pusztán bitműveletekkel (NOT, AND, OR, XOR, eltolás, rotálás) nem fog menni. Ha BCD – binárisan kódolt decimális – formában lenne, akkor még egyszerűbb lenne, de binárisból BCD-be konvertálni sem egyszerű, még ciklusokkal, elágazásokkal sem. Lásd:
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!