abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×

včera 19:22 | Nová verze

Ondřej Filip, výkonný ředitel sdružení CZ.NIC, oznámil vydání verze 2.0.0 open source routovacího démona BIRD (Wikipedie). Přehled novinek v diskusním listu a v aktualizované dokumentaci.

Ladislav Hagara | Komentářů: 0
včera 09:22 | Pozvánky

V Praze dnes probíhá Konference e-infrastruktury CESNET. Na programu je řada zajímavých přednášek. Sledovat je lze i online na stránce konference.

Ladislav Hagara | Komentářů: 1
9.12. 20:11 | Nová verze

Byl vydán Debian 9.3, tj. třetí opravná verze Debianu 9 s kódovým názvem Stretch a Debian 8.10, tj. desátá opravná verze Debianu 8 s kódovým názvem Jessie. Řešeny jsou především bezpečnostní problémy, ale také několik vážných chyb. Instalační média Debianu 9 a Debianu 8 lze samozřejmě nadále k instalaci používat. Po instalaci stačí systém aktualizovat.

Ladislav Hagara | Komentářů: 0
9.12. 00:44 | Nová verze

Po 6 měsících vývoje od vydání verze 0.13.0 byla vydána verze 0.14.0 správce balíčků GNU Guix a na něm postavené systémové distribuce GuixSD (Guix System Distribution). Na vývoji se podílelo 88 vývojářů. Přibylo 1 211 nových balíčků. Jejich aktuální počet je 6 668. Aktualizována byla také dokumentace.

Ladislav Hagara | Komentářů: 4
8.12. 21:33 | Nová verze

Po půl roce vývoje od vydání verze 5.9 byla vydána nová stabilní verze 5.10 toolkitu Qt. Přehled novinek na wiki stránce. Současně byla vydána nová verze 4.5.0 integrovaného vývojového prostředí (IDE) Qt Creator nebo verze 1.10 nástroje pro překlad a sestavení programů ze zdrojových kódů Qbs.

Ladislav Hagara | Komentářů: 0
7.12. 11:11 | Komunita

Naprostá většina příjmů Mozilly pochází od výchozích webových vyhledávačů ve Firefoxu. Do konce listopadu 2014 měla Mozilla globální smlouvu se společností Google. Následně bylo místo jedné globální smlouvy uzavřeno několik smluv s konkrétními vyhledávači pro jednotlivé země. V USA byla podepsána pětiletá smlouva s vyhledávačem Yahoo. Dle příspěvku na blogu Mozilly podala společnost Yahoo na Mozillu žalobu ohledně porušení této

… více »
Ladislav Hagara | Komentářů: 0
7.12. 05:55 | Zajímavý článek

V Londýně probíhá konference věnovaná počítačové bezpečnosti Black Hat Europe 2017. Průběžně jsou zveřejňovány prezentace. Videozáznamy budou na YouTube zveřejněny o několik měsíců. Zveřejněna byla například prezentace (pdf) k přednášce "Jak se nabourat do vypnutého počítače, a nebo jak v Intel Management Engine spustit vlastní nepodepsaný kód". Dle oznámení na Twitteru, aktualizace vydaná společností Intel nevylučuje možnost útoku.

Ladislav Hagara | Komentářů: 5
7.12. 04:44 | Komunita

Virtualizační nástroj GNOME Boxy ve Fedoře 27 umožňuje jednoduše stáhnout a nainstalovat Red Hat Enterprise Linux, který je pro vývojáře zdarma. Vývojová verze GNOME Boxy již umožňuje jednoduše stáhnout a nainstalovat další linuxové distribuce. Ukázka na YouTube. Seznam distribucí a jejich verze, nastavení a cesty k ISO obrazům je udržován v knihovně a databázi libosinfo (GitLab).

Ladislav Hagara | Komentářů: 0
7.12. 03:33 | Nová verze

Google Chrome 63 byl prohlášen za stabilní (YouTube). Nejnovější stabilní verze 63.0.3239.84 tohoto webového prohlížeče přináší řadu oprav a vylepšení. Vylepšeny byly také nástroje pro vývojáře. Opraveno bylo 37 bezpečnostních chyb.

Ladislav Hagara | Komentářů: 12
6.12. 22:55 | Pozvánky

Spolek OpenAlt zve příznivce otevřených technologií a otevřeného přístupu na 147. brněnský sraz, který proběhne v pátek 15. prosince od 18:00 hodin v restauraci Severka na rohu Tučkové a Zahradníkové.

Ladislav Hagara | Komentářů: 0
Jak se vás potenciálně dotkne trend odstraňování analogového audio konektoru typu 3,5mm jack z „chytrých telefonů“?
 (8%)
 (1%)
 (1%)
 (1%)
 (75%)
 (14%)
Celkem 952 hlasů
 Komentářů: 45, poslední 1.12. 19:00
    Rozcestník

    Dotaz: Bitové operace, bitová pole C

    20.9.2011 18:12 novacek
    Bitové operace, bitová pole C
    Přečteno: 2113×
    Ahoj, učím se jazyk C z knihy od K&R a ve druhé kapitole je podkapitolka s názvem bitové operátory. Moc to nechápu, sice převádět decimální hodnotu do binární soustavy umím, ale to teď nebude zrovna vše. Neexistuje nějaký návod, článek či publikace pro úplné začátečníky v tomto smyslu? Děkuji všem.

    ps: googlil jsem, bohužel tam byly jen návody pro |,&, atd... to mi je teď celkem naprd, když absolutně nevím, k čemu se to dělá a jak...doufám, že mě chápete :/

    Řešení dotazu:


    Odpovědi

    20.9.2011 18:41 Magog | skóre: 6
    Rozbalit Rozbalit vše Re: Bitové operace, bitová pole C
    Docela dobře je to napsáno tady: http://cs.wikipedia.org/wiki/Bitov%C3%BD_oper%C3%A1tor

    Jinak je vhodné vědět, že v paměti je uloženo číslo ve dvojkové soustavě. Takže tyhle operátory jsou velice rychlé, například pro zjišťování, zda je číslo liché nebo sudé.
    20.9.2011 20:15 novacek
    Rozbalit Rozbalit vše Re: Bitové operace, bitová pole C
    Jo, tohle bych i chápal, jen mi vrtá hlavou, k čemu to vlastně je (když se to dá zjistit např. vydělením 2ma).. a jak se např. zjistí, kde v paměti je daný bit vůbec uložen... omlouvám se, jestli vám přijde tahle otázka stupidní, bohužel, pro mě, jakožto začátečníka, dosti zásadní :(

    ps: když bych chtěl sečíst hodnotu znaku A + hodnotu znaku B, tak to musím nejprve převést do binární soustavy a až teprve aplikovat OR ?
    20.9.2011 20:52 l4m4
    Rozbalit Rozbalit vše Re: Bitové operace, bitová pole C
    Uložení: každý bajt má osm bitů, int má běžně 32, a takhle přesně vypadají v paměti, jako skupiny bitů. Všechna běžná záznamová zařízení ukládají všechno po bitech. Nic se do binární soustavy nepřevádí, ono to v ní celou dobu je. To, že píšeš něco decimálně, hexadecimálně nebo jak, je proto, aby ses nezbláznil, ale je to prostě jen zápis, reálně jsou to pořád skupiny bitů.

    Sečtení: Hodnoty dvou znaků A a B se sečtou tak, že se sečtou ty hodnoty těch dvou znaků A a B. Můžeš ty hodnoty a výsledek zapsat decimálně, binárně, ternárně nebo jak chceš, ale součet je prostě součet, na zápisu nezáleží.
    20.9.2011 21:03 Magog | skóre: 6
    Rozbalit Rozbalit vše Re: Bitové operace, bitová pole C
    Konkrétně třeba určení lichosti/sudosti čísla znamená nahlédnout na poslední bit - když je 0, je číslo sudé, jinak je liché. Tedy vlastně vyhodnocuji cislo & 1 == 1. Při dělení celého čísla celým číslem, dostanu opět celé číslo se zahozeným zbytkem (např. 26/10=2). Budu-li chtít zjistit sudost čísla pomocí dělení, musím vydělit číslo dvojkou, pak vynásobit dvojkou a porovnat s původním číslem, jestli jsem dostal to samé. Což znamená výrazně vyšší časovou složitost.

    Moc pěkné využití bitových operátorů je pro masky. Představte si, že máte nějaký systém, do kterého přistupuje více lidí. Těmto lidem chceme udělovat nějaká oprávnění. Daný člověk oprávnění buďto má, nebo nemá. Žádná jiná možnost není přípustná. Tato oprávnění seřadím v libovolném pořadí. Teď už mi stačí udělat jen to, že každému uživateli přiřadím jedno číslo ve dvojkové soustavě, které bude reprezentovat jeho množinu oprávnění. Na dané pozici bude 1, pokud oprávnění má, a 0, pokud ne. Zjišťování a nastavování oprávnění lze jednoduše implementovat pomocí binárních operátorů při velice nízké spotřebě procesorového času i paměti.

    Máte-li dvě proměnné typu char, můžete na ně bez problémů použít OR. Následující kód tedy bude fungovat bez problémů:
    char a = 'A';
    char b = 'B';
    char c = a | b;
    21.9.2011 16:24 novacek
    Rozbalit Rozbalit vše Re: Bitové operace, bitová pole C
    Děkuji moc za váš příspěvek, začínám to chápat a hlavně musím uznat, že cislo & 1 == 1 je geniální a uspoří to i pár řádků, nejen výkon procesoru. Ještě taková poznámečka, jestli není dost stupidní, ale dá se nějak vypsat hodnota např 'A' + 'B' v binární soustavě pomocí funkce printf ? (vím, že to vůbec nebudu potřebovat a vy asi taky ne, ale existujě něco takového?). Díky
    21.9.2011 17:49 l4m4
    Rozbalit Rozbalit vše Re: Bitové operace, bitová pole C
    Pomocí printf() nedá, nicméně printf() umí vypisovat šestnáctkově (%x) a osmičkově (%o), což je s trochou cviku snadno čitelné jako binární čísla, protože na každá cifra odpovídá skupině čtyř resp. tří bitů, navíc je to stručnější.
    22.9.2011 15:35 novacek
    Rozbalit Rozbalit vše Re: Bitové operace, bitová pole C
    Díky za hodnotnou diskuzi. Tímto příspěvkem bych chtěl tohle uzavřít a všem poděkovat, zejména 2 pánům, kteří mi to od základů vysvětlili. Snad budu někdy dobrý jako vy. Díky všem!
    AraxoN avatar 20.9.2011 21:14 AraxoN | skóre: 45 | blog: slon_v_porcelane | Košice
    Rozbalit Rozbalit vše Re: Bitové operace, bitová pole C
    Naposledy keď som sa o to zaujímal, tak som došiel k tomu, že inštrukcia celočíselného delenia na bežnom x86 trvá desiatky až stovky taktov procesora. Naopak, inštrukcia bitového súčtu sa vykoná za jeden-dva takty. To sa môže líšiť procesor od procesora, presnejšie by to bolo treba pozrieť v aktuálnej špecifikácii. Keď ale potrebuješ zistiť deliteľnosť dvojkou, tak použiť delenie je čistý nerozum. Iba ak by si chcel, aby táto časť programu išla stokrát pomalšie...
    A fine is a tax for doing wrong. A tax is a fine for doing well.
    20.9.2011 22:20 l4m4
    Rozbalit Rozbalit vše Re: Bitové operace, bitová pole C
    A jak jsi k tomu došel? Ani 128bitový DIV netrvá stovky taktů (i když ke stovce se to při děliteli, který je skutečně více než 64bitový, může blížit).

    Zjištění dělitelnosti 2 pomocí operátoru % inteligentní kompilátor na bitovou operaci zoptimalizuje a za normálních okolností se tím nikdo nemusí zabývat.

    A pochybuji, že toto celé nějak pomůže člověku, který má zjevně jen matnou představu, co je to bit...
    AraxoN avatar 21.9.2011 00:04 AraxoN | skóre: 45 | blog: slon_v_porcelane | Košice
    Rozbalit Rozbalit vše Re: Bitové operace, bitová pole C
    Asi som mal dodať, že naposledy keď som sa o to zaujímal, tak Intel Pentium 120MHz bol moderný procesor. Z toho, čo som teraz narýchlo vygooglil, tak u 486 to sú desiatky taktov. Pre novšie procesory som takéto tabuľky už nenašiel. Rád sa nechám poučiť.
    A fine is a tax for doing wrong. A tax is a fine for doing well.
    21.9.2011 17:52 l4m4
    Rozbalit Rozbalit vše Re: Bitové operace, bitová pole C
    U novějších procesorů je doba vykonávání variabilní a závisí na skutečné velikosti operandů, tj. procesor je dost chytrý, aby 128bitové dělení, kde je dělitel reálně jednobajtový (všechny vyšší bity nuly), nepočítal jako plné 128bitové dělení. Nejdelší doba je na Intelu IIRC asi 90 taktů.
    29.4.2013 22:10 Martin
    Rozbalit Rozbalit vše Re: Bitové operace, bitová pole C
    Nedávno jsem zkoumal efektivitu celočíselného násobení versus bitový posun na tomto příkladu: return a*5; versus return (a<<2)+a; a při kompilaci GCC už při optimalizaci -O1 z obou zápisů vygeneroval naprosto shodný assembler. Takže myslím, že u toho dělení to bude stejně tak a programátor se nemusí o optimalizaci na této úrovni starat, neboť to za něj udělá překladač.
    20.9.2011 19:51 l4m4
    Rozbalit Rozbalit vše Re: Bitové operace, bitová pole C
    Doufám, že je to aspoň second edition, která vyšla zhruba současně s ANSI C standardem v roce 1988 (a je tedy jen středně zastaralá). První vydání popisující původní K&R C, které nemá ani protoypy funkcí, je zajímavé především historicky...
    20.9.2011 20:06 novacek
    Rozbalit Rozbalit vše Re: Bitové operace, bitová pole C
    Ano, druhé vydání, jsou tam i komentáře od velkého miroslava viriuse k C99
    20.9.2011 23:57 Sten
    Rozbalit Rozbalit vše Re: Bitové operace, bitová pole C
    Používání bitových operací pro počítání (násobení, dělení) je s dnešními překladači úplně na houby, akorát si tím znepřehledníte kód. Překladače to totiž udělají za vás. Jediné, k čemu se stále hodí, jsou vlaječky (flagy), též zvané bitové masky. Třeba veškerá práva pro soubor lze uložit do jednoho bajty, kde jednotlivé bity představují jednotlivá práva. Potom můžeme definovat vlaječky představující práva třeba takto:
    #define EXECUTE (1 << 0) // 0. bit
    #define WRITE (1 << 1) // 1. bit
    #define READ (1 << 2) // 2. bit
    
    Taková práva lze potom snadno testovat právě pomocí binárních operací:
    if (perm & EXECUTE) {
        // Lze spouštět
    }
    
    if (perm & (READ | WRITE)) {
      // Lze číst i zapisovat
    }
    
    Stejně tak je lze i měnit:
    perm &= ~EXECUTE;
    // Nyní je (perm & EXECUTE) vždy nepravdivé, tj. 0. bit je vždy 0
    perm |= WRITE;
    // Nyní je (perm & WRITE) vždy pravdivé, tj. 1. bit je vždy 1
    
    21.9.2011 16:48 novacek
    Rozbalit Rozbalit vše Re: Bitové operace, bitová pole C
    I vám děkuji za hodnotný příspěvěk, jen se chci zeptat, když posunu 1 bit doleva o 0 hodnot, jak jste to udělal vy se spustitelným souborem, dostanu tu samou hodnotu, čili 1, že? A když sečtu 1 0 + 1 0 0 dostanu 110, což je 6, tak se chci zeptat, jestli ta podmínka if funguje takhle : výsledek 0 bit - nepravda, výsledek 1 bit a více, v tomto případě 1 1 0 mi dá pravdu? Díky za objasnění. už se v tom začínám trochu orientovat.
    21.9.2011 17:51 Sten
    Rozbalit Rozbalit vše Re: Bitové operace, bitová pole C
    Ano, posun o nula bitů nic neudělá a kompilátor takový posun odstraní. Ponechávám jej ale pro přehlednost.

    Ano, prava je jakékoliv číslo s jinou hodnotou než 0.

    Jinak jsem si všiml, že tam mám chybu:
    if (perm & (READ | WRITE)) {
      // Špatně: Lze číst i zapisovat
      // Správně: Lze číst nebo zapisovat (nebo oboje)
    }
    
    if ((perm & READ) && (perm & WRITE)) {
      // Lze číst i zapisovat
      // "moderní" styl
      // Nemusí být bezpečné, pro masky pouze s jedním bitem!
    }
    
    if (perm & (READ | WRITE) == (READ | WRITE)) {
      // Lze číst i zapisovat
      // "klasický" styl
      // Bezpečné, i pro masky, které mohou mít více bitů (zde díky použití |)
      // Pokud má maska jenom jeden bit, kompilátor to porování stejně odstraní
    }
    
    22.9.2011 15:25 novacek
    Rozbalit Rozbalit vše Re: Bitové operace, bitová pole C
    Ok, díky mnohokrát.

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.