Co to je? – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Co to je? – C / C++ – Fórum – Programujte.comCo to je? – C / C++ – Fórum – Programujte.com

 

suprer0
Newbie
24. 4. 2007   #1
-
0
-

Zdravim. Chtel bych si udelat program na prevod bin. souboru do Base64...
Na internetu jsem si nasel program ktery toto uz umi abych se to z nej mohl naucil.
Cely kod vesmes chapu az na tento utrzek:



unsigned char by1, by2, by3; // Jsou naplneny klasickymi osmibitovymi znaky

unsigned char by4=0, by5=0, by6=0, by7=0;
by4 = by1>>2;
by5 = ((by1&0x3)<<4) | (by2>>4);
by6 = ((by2&0xf)<<2) | (by3>>6);
by7 = by3&0x3f;


Muze mi prosim nekdo vysvetlit co tento kod dela?
Diky!

Nahlásit jako SPAM
IP: ...–
()Suprer()
suprer0
Newbie
24. 4. 2007   #2
-
0
-

Tak už jsem na to přišel, stačilo se jen ponořit více do bitových operací... :)

Nahlásit jako SPAM
IP: ...–
()Suprer()
Peter D.0
Expert
24. 4. 2007   #3
-
0
-

tie operacie poznam, ale ešte som pomocou nich nič nevypočital. Da sa niečo normalne vypočitať pomocou napr. bitoveho posunu ?

Nahlásit jako SPAM
IP: ...–
Program nemusi fungovat rychle, staci ze funguje dostatecne rychle.
Jura
~ Anonymní uživatel
637 příspěvků
24. 4. 2007   #4
-
0
-

To mephi:
Da a taky se to docela casto pouziva. Napriklad bitovy posun doleva << se pouziva pro rychle nasobeni mocnin 2. Bitovy posyun doprava je pak opereaci inverzni - deleni mocninou dvojky.



int num = 10 << 1; // <=> 10 *(2^1) = 20
int num = 10 >> 1; // <=> 10/(2^1) = 5

Bitovy soucet:
Umoznuje nastavit vybrane bity.
Pokud se vhodne definuji honoty, opet nasobky mocniny dvojky, da se do jedne promene ulozit(nastavit) vice hodnot.


typedef enum {
ePaprika = 0x02,
eOkurka = 0x04,
eOmacka = 0x08
}eCode;

int jidlo = 0; // namichame si papriku s omackou
jidlo |= ePaprika; // prida papriku nastavi 2. bit
jidlo |= eOmacka; // prida omacku - nastavi 4. bit

A k cemu to je dobre?
Da se to krasne vyuzit s operaci bitoveho nasobeni &, ktera slouzi pro vymaskovani(nastaveni bitu do 0 a samozrejme k testovani, ostatne jako prakticky vsechno v C):
if(jidlo & ePaprika)

cout << "Je tam paprika" << endl;
if(jidlo & eOmacka)
cout << "Je tam i omacka" << endl;
if(jidlo & eOkurka)
cout << "A takz okurka" << endl;

Tim jsem rozhodne nevycerpal vsechny moznosti bitovych operaci, ale zbytek si uz nekde na webu najdes jiste sam.

Nahlásit jako SPAM
IP: ...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 42 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý