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 01:23 | Komunita

Phoronix spustil 2017 Linux Laptop Survey. Tento dotazník s otázkami zaměřenými na parametry ideálního notebooku s Linuxem lze vyplnit do 6. července.

Ladislav Hagara | Komentářů: 2
23.6. 22:44 | Nová verze

Po třech měsících vývoje od vydání verze 5.5.0 byla vydána verze 5.6.0 správce digitálních fotografií digiKam (digiKam Software Collection). Do digiKamu se mimo jiné vrátila HTML galerie a nástroj pro vytváření videa z fotografií. V Bugzille bylo uzavřeno více než 81 záznamů.

Ladislav Hagara | Komentářů: 1
23.6. 17:44 | Nová verze

Byla vydána verze 9.3 open source alternativy GitHubu, tj. softwarového nástroje s webovým rozhraním umožňujícího spolupráci na zdrojových kódech, GitLab. Představení nových vlastností v příspěvku na blogu a na YouTube.

Ladislav Hagara | Komentářů: 2
23.6. 13:53 | Nová verze

Simon Long představil na blogu Raspberry Pi novou verzi 2017-06-21 linuxové distribuce Raspbian určené především pro jednodeskové miniaturní počítače Raspberry Pi. Společně s Raspbianem byl aktualizován také instalační nástroj NOOBS (New Out Of the Box Software). Z novinek lze zdůraznit IDE Thonny pro vývoj v programovacím jazyce Python a především offline verzi Scratche 2.0. Ten bylo dosud možné používat pouze online. Offline bylo možné používat pouze Scratch ve verzi 1.4. Z nového Scratchu lze ovládat také GPIO piny. Scratch 2.0 vyžaduje Flash.

Ladislav Hagara | Komentářů: 0
22.6. 14:24 | Nová verze

Opera 46, verze 46.0.2597.26, byla prohlášena za stabilní. Nejnovější verze tohoto webového prohlížeče je postavena na Chromiu 59. Z novinek lze zmínit například podporu APNG (Animated Portable Network Graphics). Přehled novinek pro vývojáře na blogu Dev.Opera. Oznámení o vydání zmiňuje také první televizní reklamu.

Ladislav Hagara | Komentářů: 0
22.6. 13:37 | IT novinky

I čtenáři AbcLinuxu před dvěma lety vyplňovali dotazníky věnované Retro ThinkPadu. Nyní bylo potvrzeno, že iniciativa Retro ThinkPad je stále naživu a Lenovo připravuje speciální edici ThinkPadu jako součást oslav jeho 25. výročí.

Ladislav Hagara | Komentářů: 21
22.6. 10:22 | Komunita

Bylo oznámeno, že frontend a runtime programovacího jazyka D bude začleněn do kolekce kompilátorů GCC (GNU Compiler Collection). Správcem byl ustanoven Iain Buclaw.

Ladislav Hagara | Komentářů: 7
21.6. 18:47 | IT novinky
Bulharská firma Olimex je známá jako výrobce kvalitních mini arm desek, u nichž se snaží být maximálně open source. Kromě velké otevřenosti taktéž zaručují dlouhodobou podporu výroby, což je vítáno ve firemním prostředí. Nyní firma ohlásila ESP32-GATEWAY, malou IoT desku s Wifi, Bluetooth, Ethernetem a 20 GPIO porty za 22EUR. Tato malá deska je ořezanou verzí ESP32-EVB.
Max | Komentářů: 21
21.6. 18:00 | Zajímavý článek

LinuxGizmos (v dubnu loňského roku přejmenován na HackerBoards a v lednu letošního roku zpět na LinuxGizmos) zveřejnil výsledky čtenářské ankety o nejoblíbenější jednodeskový počítač (SBC) v roce 2017. Letos se vybíralo z 98 jednodeskových počítačů (Tabulky Google). Nejoblíbenějšími jednodeskovými počítači v letošním roce jsou Raspberry Pi 3 Model B, Raspberry Pi Zero W a Raspberry Pi 2 Model B.

Ladislav Hagara | Komentářů: 0
21.6. 14:22 | Pozvánky

Ne-konference jOpenSpace 2017 se koná od 13. do 15. října 2017 v hotelu Farma u Pelhřimova. Registrace účastníků je nutná. Více informací na stránkách ne-konference.

Zdenek H. | Komentářů: 0
Chystáte se pořídit CPU AMD Ryzen?
 (6%)
 (31%)
 (1%)
 (9%)
 (44%)
 (9%)
Celkem 829 hlasů
 Komentářů: 65, poslední 1.6. 19:16
    Rozcestník
    Štítky: není přiřazen žádný štítek

    Dotaz: Bitový posun, UB

    4.2.2016 02:30 Tonda
    Bitový posun, UB
    Přečteno: 518×
    Zajímá mě, jestli v následujícím příkladě dojde k UB při bitovém posunu. Posouvám hodnotu typu uint_least16_t o 16 bitů vlevo. Pokud je na dané platformě int 32bit a onen uint_least16_t bude typedef na 16bit unsigned short, tak pokud to správně chápu, bude uint_least16_t povýšen nejprve na int (protože může reprezentovat všechny jeho hodnoty, tak se nepoužije unsigned) a pak se provede bitový posun, který může vyvolat UB, pokud v nejvyšším bitu v původním typu byla hodnota 1, protože se posune do sign bitu)? A jak poznám, jestli vůbec o 16 bitů posunout můžu? Čtu, že nesmím posunout o stejné či vyšší počet bitů jako povýšený operand, tj. po povýšení na int bych mohl. Jde mi o to provést bitový posun o těch 16 bitů a nechat případný "zbytek" v té proměnné na platformě, kde uint_least16_t není stejný jako uint16_t, či takový typ neexistuje.

    Odpovědi

    4.2.2016 09:48 Ovrscout
    Rozbalit Rozbalit vše Re: Bitový posun, UB
    Pokud bude uint_least16_t velké 16bitů (což je to co název typu zaručuje) tak shift do leva o 16bitů je sám o sobě UB.

    Všechny další úvahy (jako že to může být větší než 16bitů) už jsou tedy ve stínu tohoto UB. Jinak řečeno,pokud budeš posunovat max o 15 (tak jak je povoleno) tak to bude fungovat správně ať už bude velký 16 nebo 32bit. A i bez ohledu na to jestli si to překladač vnitřně převede na signed int nebo ne.

    Něco se dá najít třeba na www.securecoding.cert.org
    4.2.2016 12:07 Tonda
    Rozbalit Rozbalit vše Re: Bitový posun, UB
    Problém je, že uint_least16_t nemusí mít 16 bitů, má alespoň 16 bitů a zároveň je to nejmenší takový typ. Pro případ, že je to typ větší (možná použiju místo toho i uint_fast16_t, to bude pro můj účel asi lepší), tak tam chci nechat ty původní bity, tolik, kolik můžu, a změnit jen těch spodních 16, proto posouvám o 16 místo přímého nastavení na 0 či novou hodnotu.
    Do not shift an expression by a negative number of bits or by a number greater than or equal to the precision of the promoted left operand.
    Já právě nevím, jestli tohle chápu dobře. Mně se zdá, že mluví už o tom povýšeném operandu (tedy v mém případě by to už byl int, na který bude uint_least16_t povýšen, na jiné platrmě, kde int je 16bit povýšen nebude, to je taky problém). Jak nejlépe vyřešit tuto situaci, aby nedocházelo k UB?
    4.2.2016 13:17 Ovrscout
    Rozbalit Rozbalit vše Re: Bitový posun, UB
    Mno jediné co mne napadá je posouvat o těch 16bitů jen když víš že ten typ je opravdu větší. Vzhledem k tomu že se chceš chovat podle velikosti na konkrétní platformně tak je třeba udělat podmínku. Takhle od boku mne napadají dvě varianty(netestováno jen píšu od boku):

    A)porovnáním počtu bitů (pokud nepoužíváš optimalizace tak bude tento kód pomalejší, navíc může překladač hlásit warningy že podmínka je vždy true/false:
    #include "limit.h"
    if (sizeof(a)*CHAR_BIT>16)
    {
      a=a<<16;
    }else
    {
      a=0;
    }
    
    B)nebo podmíněným překladem, trošku čistější z hlediska generovaného kódu ale někomu se podmíněný překlad nelíbí.
    #include "stdint.h"
    #ifdef UINT_LEAST16_MAX > 65535
      a=a<<16;
    #else
      a=0;
    #endif
    

    p.s. include nema mit uvozovky ale znamenko vetsi mensi ale nejak mi to zdejsi forum nechce pustit
    4.2.2016 13:23 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Bitový posun, UB
    p.s. include nema mit uvozovky ale znamenko vetsi mensi ale nejak mi to zdejsi forum nechce pustit

    Je potřeba je zapsat entitami &lt; resp. &gt; (což udělají tlačítka "<" a ">" nad formulářem).

    4.2.2016 13:50 Tonda
    Rozbalit Rozbalit vše Re: Bitový posun, UB
    B bude asi ideální. Děkuji.
    Voty avatar 4.2.2016 14:18 Voty | skóre: 12 | blog: gemini
    Rozbalit Rozbalit vše Re: Bitový posun, UB
    Asi nejjednodušší varianta je

    uint_least16_t x;

    x <<= 8U; x <<= 8U;

    Optimalizují překladač by to mohl přeložit i docela rozumně. Např. gcc při O2 nahradí posuny XORem registru pro uint16_t a shiftem o 16 pro uint32_t.
    Jednu rozbil a tu druhou ztratil.
    4.2.2016 18:33 Radek
    Rozbalit Rozbalit vše Re: Bitový posun, UB
    Ono je to takto

    int a;
    short i; //minimalne 16b
    a = i << 16; // může delat chybu, pokud bude short 16b
    a = ((int) i) << 16; // je v poradku
    4.2.2016 19:48 Tonda
    Rozbalit Rozbalit vše Re: Bitový posun, UB
    To by myslím nešlo, když int bude stejně velký jako short a budou těch minimálních 16b. Náš profesor je na nás strašně přísný a co standard negarantuje, to nesmíme předpokládat. Úlohy spouští v emulátorech různých architektur a když mu to na jedné nejde, tak dá nedostatečnou. Má tam i nějaké zvrhlosti, kde je char 9 bitů apod.
    4.2.2016 20:59 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Bitový posun, UB
    Takže on je to domácí úkol, ne skutečný problém? :-( Teď už se nedivím, že mi to zadání od začátku připadalo podezřele umělé…
    4.2.2016 23:04 Radek
    Rozbalit Rozbalit vše Re: Bitový posun, UB
    Omlouvám se zapomnel jsem ze int muze byt 16b. použi místo toho long, ten je minimálně 32.
    kozzi avatar 5.2.2016 12:24 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
    Rozbalit Rozbalit vše Re: Bitový posun, UB

    Kdyby radsi ucil lepsi jazyky kde tyto problemy neexistuji :D

    Linux je jako mušketýři "jeden za všechny, všichni za jednoho"
    6.2.2016 05:08 Jardík
    Rozbalit Rozbalit vše Re: Bitový posun, UB
    Třeba D, že? Potřeboval jsem nedávno dělat CRC32 nad spoustou dat ... knihovní implementace pomalá. Ručně napsaná taky pomalá (optimalizace + bez kontroly indexů, bez alokací). Pak jsem zkusil napsat v C. Místo 15 minut to trvalo jen 5. A pak jsem ještě vyhodil DMD a přejel to LDC. Výsledek byl jen asi o minutu horší než C.
    kozzi avatar 7.2.2016 18:30 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
    Rozbalit Rozbalit vše Re: Bitový posun, UB

    Tak to je nekde neco spatne stejny kod v C a v D by mel byt vetsinou skoro uplne stejne vykony. Snad nikdy jsme nedosahl nijak horsiho vykonu. Samozrejme je potreba srovnavat GDC a GCC, pripadne clang ldc nebo dmc a dmd.

    Linux je jako mušketýři "jeden za všechny, všichni za jednoho"

    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.