
Prevod cisel
Zdravim ludkovia chcel by som sa spytat, ci sa da previest cislo zo 16-tkovej sustavy do 4-kovej bez toho aby som ho predtym previedol do 10-tkovej (pomôcky: papier, pero)
Zdravim ludkovia chcel by som sa spytat, ci sa da previest cislo zo 16-tkovej sustavy do 4-kovej bez toho aby som ho predtym previedol do 10-tkovej (pomôcky: papier, pero)
Zpět do poradny Odpovědět na původní otázku Nahoru
ano, dá. Minimálně "otrocky", tj. rozkladem na jednotlivé řády, jejich převodem a následným posčítáním. Ale s ohledem na dělitelnost základu (16 a 4) bych si tipnul, že na to bude nějaký cool algoritmus (protože např. 10h = 100q).
edit: pak mě napadá ta nejlepší soustava, a to dvojková: převést šestnáctkové numero do dvojkové (prosté sepsání binárních hodnot šestnáctkových číslic jak jdou za sebou a následný přepočet do čtyřkové (tj. páry binárních číslic převádět na hodnoty 0-3, začíná se odprava)
edit: např.
AFh = 10101111b = 2233q
edit2: nevládneš-li schopností zpaměti převádět šestnáctkové číslice na binární čísla, udělej si převodní tabulku:
0..0000
1..0001
2..0010
3..0011
4..0100
5..0101
6..0110
7..0111
8..1000
..
E..1110
F..1111
totéž pak pro zpětný převod do čtyřkové:
0..00
1..01
2..10
3..11
edit2: Binár je IT král, ajťáky milován...(viz "Ať žijí duchové"
V tomto speciálním případě stačí převést vstupní řetězec znak po znaku ( lhostejno, zda zepředu či zezadu ) podle převodní tabulky pro šestnáct znaků :
0 - 00
1 - 01
2 - 02
3 - 03
4 - 10
5 - 11
6 - 12
7 - 13
8 - 20
9 - 21
A - 22
B - 23
C - 30
D - 31
E - 32
F - 33
Nic víc.
Příklad : "AF" ... 2233 otrocky podle tabulky.
tak daleko jsem to už nedomýšlel..
Ještě bych podotknul, že převod naopak je podle tabulky stejně možný, jenom se řetězec musí brát po dvojicích zprava ( nebo řetězec doplňme nulou zleva, pokud je počet znaků lichý).
Pokud je v řetězci čárka (která už teda není desetinná
), převedeme zvlášť pravý a zvlášť levý řetězec.
Analogickým způsobem lze postupovat vždy, když je jeden základ n-tou mocninou druhého. Pak místo dvojic bereme n-tice.
Samozřejmě pokud není splněna naše luxusní podmínka (jeden základ mocninou druhého), otrocký postup je nepoužitelný. Pokud potřebujeme funkci pro převod z jedné obecné soustavy do druhé a nemáme ji šťastně v knihovně, jedná se o pěkné programátorské cvičení.
. No, hlavně že chodí.
Momentálně si prohlížím svůj starý výtvor a moc se v ní nevyznám
Ludia prosimvas clovek sa lisi od PC tym ze vie rozmyslat. Tabulky nechajte pre blbe stroje ;)
Da sa to zhlavy, nepotrebujes ani papier ani pero a casu potrebujes asi tak 2sekundy na cifru.
Vsetky 2 na n-tu sustavy vpodstate vychadzaju z dvojkovej, zoskupovanim bitov. 4kova zoskupujes 2bity, 16kova zoskupujes 4bity. Z toho vylpyva ze jedna cifra 16kovej bude 2 cifry 4kovej.
A teda kazdu cifru 16kovej mozes ZHLAVY vydelit 4mi a vysledok (celociselny) je prva cifra a zvysok po deleni je druha cifra 4kovej.
Priklad:
16kova: F
4kova: F(=15)/4 = 3 zvysok 3, preto "F" 16kovej je "33" v 4kovej.
Priklad2:
16kova: 96
4kova: 9/4 = 2 zvysok 1, 6/4 = 1 zvysok 2, preto "96" 16kovej je "2112" v 4kovej.
Staci ti vediet malu nasobilku (nasobky 4) do cisla 15, co vie kazdy prvak ZS.
P.S. zaryty hardwarista to robi zhlavy tak ze to prevadza zhlavy cez dvojkovu sustavu, je to pre neho jednoduchsie ako delit 4-mi :)
Držel jsem se přesně zadání tazatele :
čímž zavání : F=15.
Striktně vzato jsi to do desítkové nepřevedl, ale asi těžko někdo uvažuje C/4=3 .
Kdyby tam ta podmínka nebyla, pak je samozřejmě nějaká tabulka konina a uvedený postup je navýsost přirozený.
To neni prevod cisla do desiatkovej, to je normalne delenie F/4. Akurat som tam v zatvorke napisal co to je symbol F a jak sa to da delit. A,B,C,D,E,F su normalne cifry, stejne ako 0 az 9, a F/4 je stejna operacia ako napr. 9/4 alebo 3/4, a moze ju urobit spameti.
Neni v tom ziaden prevod cisla do desiatkovej sustavy.
P.S. uvazovat ze C/4=3 bude musiet ked to chce prevadzat priamo zo 16kovej. Stejne tak napr. v dvojkovej sustave musi iuvazovat ze 1+1=10, ked chce nieco robit v dvojkovej. Ked tak uvazovat nevie tak ma smolu nebude prevadzat nic z hlavy :)
OK
Hezky po pismenku, kazde nahradis dvema:
IF 0 THEN 00
IF 1 THEN 01
IF 2 THEN 02
IF 3 THEN 03
IF 4 THEN 10
IF 5 THEN 11
IF 6 THEN 12
IF 7 THEN 13
IF 8 THEN 20
IF 9 THEN 21
IF A THEN 22
IF B THEN 23
IF C THEN 30
IF D THEN 31
IF E THEN 32
IF F THEN 33
a kdybych nebyl ** tak jsem si mohl precist, ze uz to tu nikdo psal. Nic jednodussiho se vymslet neda, maximalne jeste:
Znak%mod 4. S tim, ze to muze bejt klidne v 16tkove soustave "mod", to neni nic proti nicemu.