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í
×

dnes 01:44 | Zajímavý projekt

Kampaň na podporu chytrého telefonu Librem 5, jenž by měl respektovat bezpečnost, svobodu a soukromí uživatelů, úspěšně skončila. Bylo vybráno více než 2,1 milionu dolarů, tj. cíl kampaně byl splněn na více než 141 %. Objednáno bylo cca 3 000 telefonů. Telefon Librem 5 by měl být k dispozici v lednu 2019.

Ladislav Hagara | Komentářů: 1
včera 21:11 | Komunita

Ke zhlédnutí jsou videozáznamy přednášek z konferencí All Systems Go! (media.ccc.de) a GStreamer Conference 2017 (ubicast.tv) konaných o víkendu 21. a 22. října. All Systems Go! v Berlíně a GStreamer Conference 2017 v Praze.

Ladislav Hagara | Komentářů: 0
včera 20:33 | Komunita

MojeFedora.cz informuje (en), že Fedora 27 přináší snadný přístup k Red Hat Enteprise Linuxu. Virtualizační nástroj Boxy nyní umožňuje jednoduše stáhnout a nainstalovat Red Hat Enterprise Linux, který je pro vývojáře zdarma. Vytvořit lze neomezené množství virtuálních mašin s RHEL.

Ladislav Hagara | Komentářů: 1
včera 19:00 | Komunita

Konsorcium Linux Foundation oficiálně představilo licence pro komunitní otevřená data Community Data License Agreement (CDLA). První licence je copyleftová CDLA-Sharing a druhá permisivní CDLA-Permissive. Odpovědi na často kladené otázky ve FAQ.

Ladislav Hagara | Komentářů: 0
včera 13:55 | Pozvánky

Spolek OpenAlt zve příznivce otevřených technologií a otevřeného přístupu na 145. pražský sraz, který proběhne ve čtvrtek 26. října od 18:00 hodin v karlínském Pivovarském klubu. Najdete jej kousek od metra Florenc na adrese Křižíkova 17, Praha 8. Jedná se o poslední sraz před konferencí OpenAlt 2017, jež proběhne o víkendu 4. a 5. listopadu 2017 na FIT VUT v Brně. Běží registrace účastníků.

Ladislav Hagara | Komentářů: 0
včera 06:00 | Zajímavý software

Byla vydána verze 0.56 open source platformy Home Assistant (GitHub) pro monitorování a řízení inteligentní domácnosti naprogramované v programovacím jazyce Python verze 3 a bežící také například na Raspberry Pi. Pro vyzkoušení je k dispozici demo [reddit].

Ladislav Hagara | Komentářů: 0
22.10. 16:55 | Nová verze

Byla vydána verze 1.0 klienta F-Droid určeného pro instalaci aplikací do Androidu ze softwarového repozitáře F-Droid (Wikipedie), alternativy k Google Play, nabízející pouze svobodný a otevřený software. Podrobnosti v přehledu změn [Hacker News].

Ladislav Hagara | Komentářů: 6
22.10. 00:55 | Nová verze

Po téměř 13 měsících vývoje od verze 0.11.0 byla vydána verze 0.12.0 hardwarově nenáročného desktopového prostředí LXQt (Lightweight Qt Desktop Environment, Wikipedie) vzniklého sloučením projektů Razor-qt a LXDE. Přehled novinek v příspěvku na blogu.

Ladislav Hagara | Komentářů: 10
21.10. 12:33 | Zajímavý software

Článek ne Medium představuje nejnovější stabilní verzi 2.0 svobodné decentralizované mikroblogovací platformy a sociální sítě podobné Twitteru Mastodon (Wikipedie). Detailní přehled novinek na GitHubu [Hacker News].

Ladislav Hagara | Komentářů: 0
21.10. 06:00 | Komunita

V Praze na půdě Elektrotechnické fakulty ČVUT dnes probíhá RT-Summit 2017 – setkání vývojářů linuxového jádra a uživatelů jeho real-time verze označované jako preempt-rt. Přednášky lze sledovat online na YouTube.

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ů“?
 (10%)
 (1%)
 (0%)
 (1%)
 (75%)
 (12%)
Celkem 235 hlasů
 Komentářů: 8, poslední 22.10. 23:02
    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: 519×
    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.