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 10:11 | IT novinky

    V pořadí šestou knihou autora Martina Malého, která vychází v Edici CZ.NIC, správce české národní domény, je titul Kity, bity, neurony. Kniha s podtitulem Moderní technologie pro hobby elektroniku přináší ucelený pohled na svět současných technologií a jejich praktické využití v domácích elektronických projektech. Tento knižní průvodce je ideální pro každého, kdo se chce podívat na současné trendy v oblasti hobby elektroniky, od

    … více »
    Ladislav Hagara | Komentářů: 0
    dnes 03:11 | Komunita

    Linux Foundation zveřejnila Výroční zprávu za rok 2025 (pdf). Příjmy Linux Foundation byly 311 miliónů dolarů. Výdaje 285 miliónů dolarů. Na podporu linuxového jádra (Linux Kernel Project) šlo 8,4 miliónu dolarů. Linux Foundation podporuje téměř 1 500 open source projektů.

    Ladislav Hagara | Komentářů: 0
    dnes 02:11 | Zajímavý článek

    Jean-Baptiste Mardelle se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 25.12.0 editoru videa Kdenlive (Wikipedie). Ke stažení také na Flathubu.

    Ladislav Hagara | Komentářů: 0
    dnes 02:00 | Nová verze

    OpenZFS (Wikipedie), tj. implementace souborového systému ZFS pro Linux a FreeBSD, byl vydán ve verzi 2.4.0.

    Ladislav Hagara | Komentářů: 0
    dnes 01:00 | IT novinky

    Kriminalisté z NCTEKK společně s českými i zahraničními kolegy objasnili mimořádně rozsáhlou trestnou činnost z oblasti kybernetické kriminality. V rámci operací OCTOPUS a CONNECT ukončili činnost čtyř call center na Ukrajině. V prvním případě se jednalo o podvodné investice, v případě druhém o podvodné telefonáty, při kterých se zločinci vydávali za policisty a pod legendou napadeného bankovního účtu okrádali své oběti o vysoké finanční částky.

    Ladislav Hagara | Komentářů: 3
    včera 14:44 | IT novinky

    Na lepší pokrytí mobilním signálem a dostupnější mobilní internet se mohou těšit cestující v Pendolinech, railjetech a InterPanterech Českých drah. Konsorcium firem ČD - Telematika a.s. a Kontron Transportation s.r.o. dokončilo instalaci 5G opakovačů mobilního signálu do jednotek Pendolino a InterPanter. Tento krok navazuje na zavedení této technologie v jednotkách Railjet z letošního jara.

    Ladislav Hagara | Komentářů: 5
    včera 12:22 | Bezpečnostní upozornění

    Rozšíření webového prohlížeče Urban VPN Proxy a další rozšíření od stejného vydavatele (např. 1ClickVPN Proxy, Urban Browser Guard či Urban Ad Blocker) od července 2025 skrytě zachytávají a odesílají celé konverzace uživatelů s AI nástroji (včetně ChatGPT, Claude, Gemini, Copilot aj.), a to nezávisle na tom, zda je VPN aktivní. Sběr probíhá bez možnosti jej uživatelsky vypnout a zahrnuje plný obsah dotazů a odpovědí, metadata relací i

    … více »
    Ladislav Hagara | Komentářů: 5
    včera 05:22 | Zajímavý software

    QStudio, tj. nástroj pro práci s SQL podporující více než 30 databází (MySQL, PostgreSQL, DuckDB, QuestDB, kdb+, …), se stal s vydáním verze 5.0 open source. Zdrojové kódy jsou k dispozici na GitHubu pod licencí Apache 2.0.

    Ladislav Hagara | Komentářů: 6
    včera 04:55 | Nová verze

    Byla vydána nová verze 259 správce systému a služeb systemd (Wikipedie, GitHub).

    Ladislav Hagara | Komentářů: 0
    včera 02:55 | Zajímavý článek

    Cloudflare Radar poskytuje aktuální informace o globálním internetovém provozu, útocích nebo trendech. Publikován byl celkový přehled za rok 2025. Globální internetový provoz vzrostl v roce 2025 o 19 %.

    Ladislav Hagara | Komentářů: 0
    Kdo vám letos nadělí dárek?
     (0%)
     (0%)
     (0%)
     (0%)
     (0%)
     (0%)
     (33%)
     (33%)
     (33%)
    Celkem 6 hlasů
     Komentářů: 10, poslední dnes 12:54
    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: 586×
    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.