Ahoj, som na kapitole Bitové operátory, no nedokážem pochopiť ich význam,chápem čo každý jeden robí , no žiadny praktický význam.Vďaka za vysvetlenie
Fórum › C / C++
Bitové operátory
Tak třeba pro implementaci WebSocket serveru potřebuješ binární operace, protože zprávy od klienta chodí zašifrované 4 bitovým klíčem, pomocí kterého je třeba XORem data dešifrovat. To je první věc co mě napadla.
Pak pokud zabrousíš k mikroprocesorů Atmel, tam se všechno dělá přes binární registry.
Využití je spousta, ale jsou to spíš nízkoúrovňové nebo síťové věci.
Výhodou bitových operací je rychlost. Je to vhodné např. při čtení stavu klávesnice z portu jednočipu nebo naopak ovládání nějakého zařízení připojeného k portu. Umožňují zjišťovat a měnit stav jednotlivých bitů. Dále se to používá v parametrech funkcí - WinAPI je toho plné, kde nastavení chování funkce je dáno bitovou operací (často bitovým součtem) jednotlivých možných hodnot. Pak stačí jenden parametr místo "dlouhé nudle". Na jednočipech, které nemají algebru, lze z nich vytvořit komplet algebru.
hu
"som na kapitole Bitové operátory"
link?
stranka z google?
A co ti na strance neni jasne? Knizka doma, kterou nevidime, nemuzeme komentovat.
Obecne se bitove operatory pouzivaji casto a kvuli rychlosti.
Napriklad na linuxu prava k souboru jsou dana treba jako 777, kde to bitove je rwx rwx rwx. Je rychlejsi ifem porovnat 1 bit nez 8 bitu (1 byte). Skoro 8x rychlejsi :)
U 64 bitovych instrukci se prenasi 64 bitu, to uz je 64x rychlejsi.
Podobne jsou resene ruzne dalsi priznaky.
Take mas v programu podminky? x>50 && x<100. V dalsim kroku cyklu se treba x nemeni, tak program uz si pamatuje predchozi vysledky. Je rychlejsi porovnat boolean true/false, ze hodnota je stejna jako predchozi, 1 bit neb porovnavat 8 bitu x s 8 bitu cisla 50 a 8 bitu x a 8 bitu cisla 100 znovu.
Potrebujes porovnat, zda jsou 3 cisla rovny nule?
x==0 && y==0 && z==0, parada, casove (8+8)+(8+8)+(8+8) bitovych operaci, 6x8
a co treba bitove to secist x | y | z == 0, (8 | 8 | 8 == 8), 4x8
Web RTC / Web-socket prenos XORovani zpravy .Coz se dela kvuli tomu, aby se neopakovala treba 100x bitova 0 a tim by mohlo zarizeni ztratit synchronizaci. Cili schopnost rozpoznat pocet prijatych bitu, bylo jich 100 nebo 101 nebo 99? Technika neni dokonala, nedokaze presne na tisiciny sekund rozlisovat.
Jo, dalsi pouziti treba v dekoderu obrazku, videa a hudby. Tam se koduji data do huffmanovych kodu. Coz je bitovy zapis jinak 8 bitoveho cisla podle cetnosti jeho vyskytu.
Priklad, mas knizku, 100.000 znaku. Spocitas cetnost znaku. A podle toho priradis huffmanuv kod. Bezne mas na znak 8 bitu. Ale kod ti nastavi pro nejcetnejsi znaky 2-3 bity a pro ty, ktere tam skoro nejsou treba 16. takze pak 100.000 znaku zakodujes treba na 30.000. Presne tohle ma v sobe i jpeg. Predtim se provedou ale jeste dalsi operace.
Porovnání umí běžná ALU udělat i s Bytem, uměla to už 8051, která vznikla v polovině sedmdesátých let. Cennou výhodou kombinace bitového XOR s JZ nebo s JNZ bylo, že nezasahovala příznaky. CJNE zase právě díky nastavení příznaku C umožňovala trojnásobné větvení (menší, větší, rovno). V okamžiku, kdy se měly porovnat vícebytové operandy, jednoznačně vítězila XOR spolu s OR a JZ/JNZ na rychlost i jednoduchost algoritmu.
U vícebitových procesorů bych očekával, že kromě práce s bitem a Bytem bude umět práci i s násobky Bytů jako např. 2 Byte a 4 Byte.
Další využití bitových operandů se mi vybavilo u 7-bitového kódování sms. V podstatě je to jednoduchá komprese. Základní ASCII tabulka obsahující jen angl. abecedu se vejde do rozsahu 0 - 127, to odpovídá 7 bitům, osmý bit v Bytu je vždy 0. Tento osmý bit se před odesláním sms u každého znaku vypustí, tzn. že je potřebat 7 Bytů pro osm znaků sms. Dá se to dobře provést pomocí bitových posunů, bitového OR.
Bitové operace se používají i u některých kontrolních mechanismů (tuším, že u CRC, ale to bych musel pogůglit).
hu
Pravda, v pc bitove operace tam pracuji se vsemi 8 (16 atd) najednou, paralelne. Coz je taky vyhoda, proti porovnani > a <. Rychlostne to bude tedy trochu jinak, ale celkove stale rychlejsi se xor.
Jinak, u xor bacha, je to operace, ktera zahriva procesor. Aspon ty stare.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Clenske operatory — založil Alexej
Násobné operátory v C — založil pirat7777
Sablona - bin. operatory — založil Gadael
Chybejici operatory ve VB.Net pro .NetMF — založil Adrian
Bitove operace — založil Keny
Moderátoři diskuze