Jak vyřešit tento pseudo code?

Od: Datum: 23.06.13 11:16 odpovědí: 41 změna: 26.06.13 00:56

h1 = dbd14a90;
h2 = 3c36c059;
b1 = bxor(h1, h2);
b2 = subtractBit(b1, 11100111111001111000100000000000);
b3 = bxor(b2, 11111110000);
i1 = binToInt(b3);

Dá se toto v něčem spustit? Či nějak "spočítat"?


Seznam odpovědí:
 
moment čekejte prosím, probíhá přenos dat...
Zobrazení struktury odpovědí v otázce
Skrytí struktury odpovědí v otázce
Zobrazení struktury odpovědí v otázce

 

Odpovědi na otázku:
Datum: 23.06.13 11:22
avatar

Na papíře to máte během chvilky..

Ohodnoceno: 0x
 
Od: rainkan
Datum: 23.06.13 11:24

Je zde nějaká stránka s postupem?

Od: rainkan
Datum: 23.06.13 11:28

Toto mi došlo

h1 = dbd14a90;
h2 = 3c36c059;
b1 = bxor(dbd14a90, 3c36c059);

Datum: 23.06.13 14:51
avatar

Mno. Tak teď si tu závorku rozepište po jednotlivých bitech, tedy obě čísla na 32 míst. A nejlépe pod sebe,

Pak provedete bitový XOR a dostanete jedno číslo, které přiřadíte do b1. (názvy těch proměnných zřejmě mají souvislost s "datovým typem")

Pak od toho odečtete další číslo, znovu xorujete a výsledek zapíšete jako desítkový int.

Ohodnoceno: 0x
 
Od: rainkan
Datum: 23.06.13 15:23

Vzdávám to, nebo mi z toho praskne hlava. Binární kód mi nevychází 32ou místný, ale z kalkulačky jen 23ti místný a online converteru mi vychází něco okolo padesáti. Zamotal jsem se do toho a radši to vzdávám.

Datum: 23.06.13 18:28
avatar

Jestli ještě umím počítat, tak 8 hexadecimálních číslic dá 8*4 = 32 bitů

DBD1 4A90 = 1101 1011 1101 0001 (mezera) 0100 1010 1001 0000

Druhé číslo napíšete pod něj a XOR po jednotlivých bitech je jednoduchou záležitostí.

Ohodnoceno: 0x
 
Od: rainkan
Datum: 23.06.13 19:30

1101 1011 1101 0001 --- 0100 1010 1001 0000
1111 0000 1101 1000 --- 1100 0000 0101 1001

A když to zadám na kalkulačce a kliknu na XOR, tak se nic nestane.

Od: rainkan
Datum: 23.06.13 19:33

Result in

binary: 1010110000100110001010110010

decimal: 180511410

hexadecimal: ac262b2

Datum: 23.06.13 20:52
avatar

Než to tam nacvakáte, tak to máte ručně "spočítáno" rychlejš. Kde se čísla pod sebou liší, píšu jedna, jinak nula.

Ohodnoceno: 0x
 
Od: rainkan
Datum: 23.06.13 23:46

Aha, a já se to tu snažim na tý kalkulačce tim XORem.

0010 1011 0000 1001 --- 1000 1010 1100 1001

Od: rainkan
Datum: 23.06.13 23:55

h1 = dbd14a90;
h2 = 3c36c059;
b1 = bxor(0010101100001001, 1000101011001001);
b2 = subtractBit(00101011000010011000101011001001, 11100111111001111000100000000000);
b3 = bxor(b2, 11111110000);
i1 = binToInt(b3);

Tak, teď jsem myslel že mám ten xor provést i u té B2ky, ale to by mi nevyšlo. Zkusím si vygooglovat co znamená to substractBit

Od: rainkan
Datum: 24.06.13 22:51

Neúspěch.

Od: luke237
Datum: 25.06.13 09:38
To je ale prekvapeni! *smich* To jsme ti mohli rict hned, ze nic nenajdes. Prave proto se to nazyva PSEUDO-kod, tedy "vypada to jako kod, ale zadny skutecny kod to neni". Je to psane tak, aby se to dalo normalne precist a pochopit bez znalosti konkretniho programovaciho jazyka nebo instrukcni sady urciteho procesoru. Takze SubtractBit znamena "bitove odecist". Zrejme se tim mysli, ze bitova reprezentace nema zadny bezny vyznam (znamenka, dvojkovy doplnek, desetinne cislo, matice+exponent, ...). Proste to odectes bit po bitu stejne jako 2 unsigned int.
Ohodnoceno: 0x
 
Od: luke237
Datum: 23.06.13 19:33
Ver Dzordzovi. Ja jsem liny to pocitat (a chvilku mi trvalo, nez jsem pochopil, ze bxor je bitovy XOR, ale jinak Dzordrz ten pseudo-code pochopil spravne.

Vsechno to jsou opravdu 32-bitova cisla (zapsana bud primo binarne nebo jako 8 hexadecimalnich cislic).

Ohodnoceno: 0x
 
Od: rainkan
Datum: 23.06.13 20:58

Dzordz je velmi zkušený podle toho jak moc mi zatím poradil. To já jsem ten který to tu nepobírá :(

Od: rainkan
Datum: 25.06.13 09:35

Zapoměl jsem že jste tu psal i zbytek návodu.

Tak jsem se pokusil odečítat.

00101011000010011000101011001001 - 11100111111001111000100000000000 a vyšlo mi 10111100110111011111110100110111, což je příliš dlouhé.

Od: luke237
Datum: 25.06.13 09:43
Ani to nemusim pocitat, abych videl, ze to mas blbe. Druhe cislo ma na konci 11 nul, takze ve vysledku bude poslednich 11 bitu stejnych jako v prvnim cisle.
Ze ti vyslo 32-bitove cislo pro odecteni dvou 32-bitovych cisel? To je ale prekvapeni! ;)
Ohodnoceno: 0x
 
Od: rainkan
Datum: 25.06.13 09:50

Tak jsem to odčítání pochopil špatně.

Od: luke237
Datum: 25.06.13 09:54
Odecita se stejne jako v desitkove soustave - cisla se napidat si pod sebe, pocita se to odzadu a zjistuje se, kolik se musi pridat ke spodnimu cislu, aby se dostalo horni cislo, vcetne prevaleni pres "desitku" (v binarni soustave pres dvojku).
Ohodnoceno: 0x
 
Od: luke237
Datum: 25.06.13 09:55
"... cisla se NAPISI pod sebe ..."
Ohodnoceno: 0x
 
Od: luke237
Datum: 25.06.13 09:51
Aha, uz vidim, proc si myslis, ze ti to vyslo dlouhe. V tom argumentu pro vypocet b3 je jen 11 bitove cislo. Nevim, jestli se tim mysli, ze se zepredu doplni nulami na 32 bitu nebo se uvazuje jen tech poslednich 11 bitu *nevi*
Ohodnoceno: 0x
 
Od: rainkan
Datum: 25.06.13 10:01

Přesně proto :)

No, jdu zkusit vypočítat ten výsledek a hned ho sem napíšu.

Od: rainkan
Datum: 25.06.13 10:03

Tak zase nic, tam vyšl tolik nul.

Od: rainkan
Datum: 25.06.13 10:07

Pokud mám pod sebou 1 a 1, tak vyjde 0 a pokud nahoře 0 a dole 1, tak vyjde 1?

Od: rainkan
Datum: 25.06.13 10:15

Myslím že mám výsledek

00101011000010011000101011001001

Od: luke237
Datum: 25.06.13 10:26
Mas to zase blbe: 1-1=0 (napr. bit 12, 16, 17 zprava).
Ohodnoceno: 0x
 
Od: rainkan
Datum: 25.06.13 10:35

No tak jsem to počítal správně, ale pak sem zahlédl na nějaké stránce, že to má být jinak a podělal to.

Takže 00101011000010000000001011001001

Od: luke237
Datum: 25.06.13 10:47
Podle me to porad nemas spravne. Bit 18 zprava: 0-1=1 (prenos do dalsiho radu); tobe vysla "0"
bit 19 zprava: dole je 1, s prenosem je to 1+1=0 a odecitani je tedy pak 0-0=0
atd.
Ohodnoceno: 0x
 
Od: rainkan
Datum: 25.06.13 12:24

Tak těmhle počtům nerozumím.

Od: luke237
Datum: 25.06.13 23:43
Tak jeste jednou.
Bit 18: dole je 1, kolik se musi pricist (tj. nula nebo jedna?), aby clovek dostal tu "0" (coz je zkratka pro "10") nahore? Musi pricist "1". Ale protoze se uz prehoupl pres dvojkovy rad, tak vznikl prenos do dalsiho sloupecku (bit 19 - viz nize).
Bit 19: Dole je "1", k tomu pricteme ten prenos z bitu 18, vyjde nam 1+1=10, tedy "0" a kolik musime pricist (nula nebo jedna?), aby nam vysla ta nula nohore? Musime pricist "0".
Nevim, jestli je to ted jasnejsi.
Nevim, jestli se nepokousis resit pro tebe moc slozite problemy. Nejdrive ten MD5 hash, ted tyhle pseudo instrukce. Mozna by jsi mel vzit informatiku (pocitace, digitalni techniku) hezky od zacatku a podivat se na zakladni operace ve dvojkove soustave a bitove manipulace, pak si pridat nejaky jednoduchy procesor (Intel 8080/8086/8048/8051/...) a jeho instrukcni sadu a pak by ti tento ukol pripadal jednoduchy.
Ohodnoceno: 0x
 
Od: rainkan
Datum: 25.06.13 23:58

Ááno, už jsem to pochopil, děkuji za vysvětlení. Hned to jdu vyzkoušet.

Od: rainkan
Datum: 26.06.13 00:02

Tak, trochu jsem se do toho zas zamotal, ale doufám že už je to správně.

01000101101010100000001011001001

Od: luke237
Datum: 26.06.13 00:06
Vyslo mi to stejne.
Priste to radeji pis po skupinach 4 nebo 8 bitu, at se v tom lepe orientuje.
Ohodnoceno: 0x
 
Od: rainkan
Datum: 26.06.13 00:09

No tak tedy hurá :D

Povedlo se Vám dokopat mě k výsledku, mnohokrát děkuji.

Teď už si tedy vezmu jen ty poslední dvě hodnoty a provedu XOR.

Od: luke237
Datum: 26.06.13 00:35
... a ja se budu se zajmem divat, jak zapasis s tim 11-bitovym cislem a jak prevadis 32-bitovy int. :D
Ohodnoceno: 0x
 
Od: rainkan
Datum: 26.06.13 00:47

No to snad ne :D

Tak to už mi z toho jde hlava kolem.

Od: rainkan
Datum: 26.06.13 00:56

Tak to 11ti bitové číslo sem vyřešil jak říkal Dzordz, doplnil jsem před něj nuly, aby z něj vyšlo 32bitové, ale s tim intem ještě nevim nevim. Zase zkusim strýčka googla a uvidím, ale nejspíš až zítra, teď se mi z toho motá hlava už.

 

Od: luke237
Datum: 25.06.13 10:22
Jo, vyjde "1", ale vznikne ti prenos do dalsiho sloupecku, stejne jako pri odecitani v desitkove soustave.
Ohodnoceno: 0x
 
Od: rainkan
Datum: 25.06.13 10:24

Sakra. Tak to jsem neudělal. A nejsem si jist jak.

Datum: 25.06.13 10:49
avatar

To mě taky zarazilo, že ten druhej argument má takhle divnej počet míst.

Tipoval bych, že výsledek bude mít plnou délku, ovšem je otázka, jestli místa vpředu zůstanou, jak byla, nebo se druhý argument doplní nulama (to asi spíš).

Ohodnoceno: 0x
 
Od: rainkan
Datum: 25.06.13 11:35

No tak jediné co mi zbývá je SPRÁVNĚ odečíst ty dvě hodnoty, abych pak mohl XORovat výsledek s poslední hodnotou a tot vše. XOR mě Dzordz již naučil, horší je to s tím odečítáním bitů.

 

 

 

 

Přihlásit se k odběru odpovědí z této otázky:

Neneseme odpovědnost za správnost informací a za škodu vzniklou jejich využitím. Jednotlivé odpovědi vyjadřují názory jejich autorů a nemusí se shodovat s názorem provozovatele poradny Poradte.cz

 
Copyright © 2004-2016 Poradna Poradte.cz. Všechna práva na poradně Poradte.cz vyhrazena.