Jazyk C - funkce a pole

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Uživatelský avatar
faraon
Master Level 8
Master Level 8
Příspěvky: 6350
Registrován: prosinec 10
Pohlaví: Muž

Re: Jazyk C - funkce a pole

Příspěvekod faraon » 07 čer 2017 17:27

Dnes, když se začátečníci jako první jazyk učí Javu, bych tu věčnou modlitbičku o správných návycích radši ani nezmiňoval :lol:

Kód: Vybrat vše

for (unsigned int maska=UINT_MAX-INT_MAX;maska;maska/=2) putchar((maska&cislo)?'1':'0');

Kód: Vybrat vše

for (unsigned int maska=UINT_MAX-INT_MAX;maska;maska>>=1) putchar((maska&cislo)?'1':'0');

Jsi si jistý svým tvrzením a posunech?


"Pimonte, Pimonte, co jsi ty za pána, že za tebou padla ta majlandská brána, hop, hop, hop.
Ta majlandská brána a ty čtyři mosty, vystav si, Pi­monte, silnější forposty, hop, hop, hop!"

Píseň dobrého vojáka Švejka

Reklama
cpp
nováček
Příspěvky: 41
Registrován: červen 17
Pohlaví: Muž

Re: Jazyk C - funkce a pole

Příspěvekod cpp » 08 čer 2017 14:04

Co je na mém tvrzení o posuvech nejasného?

Kód: Vybrat vše

x = x >> 2;


je ekvivalentní k

Kód: Vybrat vše

x /= 4;


stejně tak

Kód: Vybrat vše

x = x << 4;


je ekvivalentní k

Kód: Vybrat vše

x *= 16;

Uživatelský avatar
faraon
Master Level 8
Master Level 8
Příspěvky: 6350
Registrován: prosinec 10
Pohlaví: Muž

Re: Jazyk C - funkce a pole

Příspěvekod faraon » 08 čer 2017 17:03

Kód: Vybrat vše

x = x >> 2;
SAR 2

Kód: Vybrat vše

x /= 4;
DIV 4
"Pimonte, Pimonte, co jsi ty za pána, že za tebou padla ta majlandská brána, hop, hop, hop.
Ta majlandská brána a ty čtyři mosty, vystav si, Pi­monte, silnější forposty, hop, hop, hop!"

Píseň dobrého vojáka Švejka

cpp
nováček
Příspěvky: 41
Registrován: červen 17
Pohlaví: Muž

Re: Jazyk C - funkce a pole

Příspěvekod cpp » 08 čer 2017 19:20

Optimalizátor udělá z dělení 4 posun o 2 bity.

Uživatelský avatar
faraon
Master Level 8
Master Level 8
Příspěvky: 6350
Registrován: prosinec 10
Pohlaví: Muž

Re: Jazyk C - funkce a pole

Příspěvekod faraon » 09 čer 2017 01:22

Tak proč ten posun nenapsat rovnou, když vím že tam nakonec stejně bude?

Kromě toho, já jsem v tom příkladu nedělil dvěma, ale posouval maskovací bit ;-)
"Pimonte, Pimonte, co jsi ty za pána, že za tebou padla ta majlandská brána, hop, hop, hop.
Ta majlandská brána a ty čtyři mosty, vystav si, Pi­monte, silnější forposty, hop, hop, hop!"

Píseň dobrého vojáka Švejka

cpp
nováček
Příspěvky: 41
Registrován: červen 17
Pohlaví: Muž

Re: Jazyk C - funkce a pole

Příspěvekod cpp » 09 čer 2017 14:26

"Tak proč ten posun nenapsat rovnou, když vím že tam nakonec stejně bude?"

Utrpí tím čitelnost a pružnost kódu.

Uživatelský avatar
satik
Level 5.5
Level 5.5
Příspěvky: 3010
Registrován: leden 15
Bydliště: Praha / Krkonoše
Pohlaví: Muž

Re: Jazyk C - funkce a pole

Příspěvekod satik » 09 čer 2017 15:37

Částečnej souhlas s cpp, čitelnost kódu by měla bejt na prvním místě, samozřejmě snažit se psát optimalizovaný kód, ale nedělat zbytečně předčasnou optimalizaci, obzvlášť na místech, který se zavolaj třeba jen párkrát za vteřinu.
osobně většinou kód napíšu nějakým jednodušším způsobem a až pak když nějaká část běží pomaleji, než by bylo záhodno, tak se pustím do nějakých dalších optimalizací, nejlíp s využitím profileru, abych neoptimalizoval něco, co stejně nebude mít vliv.

Jinak u bitflagů bych osobně radši viděl asi ten bitovej posun než dělení i kvůli čitelnosti, u toho mě rychlejc trkne, že jde o flagy.
https://www.facebook.com/peasantsandcastles/
https://www.twitch.tv/satikcz/
https://www.youtube.com/c/SatikCZE
PC: Intel Core i7 8700K@5GHz+EK KIT L360, ASUS Maximus X HERO, 32GB RAM@3466, MSI GTX 1080Ti Gaming, Fractal Define S, Seasonic P860, SSD 2TB celkem
Periferie: 3x AOC AG271QG (1440p 165Hz IPS), Razer Deathadder+Blackadder Chroma, Steelseries QcK+, Sennheiser PC360, DXRACER OH/KF06/NB

Uživatelský avatar
faraon
Master Level 8
Master Level 8
Příspěvky: 6350
Registrován: prosinec 10
Pohlaví: Muž

Re: Jazyk C - funkce a pole

Příspěvekod faraon » 09 čer 2017 15:45

"Pimonte, Pimonte, co jsi ty za pána, že za tebou padla ta majlandská brána, hop, hop, hop.
Ta majlandská brána a ty čtyři mosty, vystav si, Pi­monte, silnější forposty, hop, hop, hop!"

Píseň dobrého vojáka Švejka

cpp
nováček
Příspěvky: 41
Registrován: červen 17
Pohlaví: Muž

Re: Jazyk C - funkce a pole

Příspěvekod cpp » 09 čer 2017 17:00

To záleží na tom, co má být cílem. Když je skutečně cílem nějaká operace s bity, tak s vymaskováním a posuvy nemám problém. Pokud je ale cílem dělení nebo násobení, tak by tato skutečnost měla být jasná z kódu.

Co když potom zjistíš, že místo dělení 8 potřebuješ dělit 10? Pak to budeš muset přepisovat.

Umět dobře algoritmizovat a zapsat nějakou činnost z tebe dobrého programátora neudělá. Důležité (možná nejdůležitější) sou ty věci okolo - týmová spolupráce, psaní snadno čitelného kódu, umět používat software usnadňující vývoj.

"Proč jsou tam třeba bitové operace, a spousta dalších "špatných" věcí, které se dají udělat na dvacet řádků mnohem čitelněji???"

C tě nevodí za ručičku, nechá tě dělat i ty špatné věci. Umožní ti spoustu věcí, jako používání používání goto, předávání velkých struktur hodnoutou... A zrovna bitové posuny mají smysl ve spoustě případů (fixed point desetinná čisla, atp). Jaký ale mají smysl místo dělení a násobení, když ty bitové posuvy z toho udělá optimalizátor.

Dnešní překladače stojí a padají s optimalizátorem. Vždyť 70-90% času překladu zabírá samotná optimalizace. Tak ten optimalizátor nechte dělat svou práci. Klidně dělejte hloupě jednoduché funkce (KISS), když se bude zdát optimalizátoru výhodné z toho udělat inline funkci, tak to sám udělá...

Dalším "bastlířkým" nešvarem je nadužívání maker. Preprocesor by se měl využívát tam, kde dává skutečný smysl a to sice pro podmíněný překlad.

Tím samozřejmě neříkám, že je nutné se spoléhat jen na optimalizátor, to v žádném případě. Optimalizace by se měly dělat jenom tam, kde mají smysl.


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Transponování pole hodnot
    od Kurimak » 23 srp 2018 06:34 » v Kancelářské balíky
    4
    365
    od Kurimak
    24 srp 2018 08:33
  • nejlepší programovací jazyk?
    V tomto tématu je hlasování. od Mouse_cz » 06 lis 2017 18:44 » v Programování a tvorba webu
    24
    1258
    od second32
    08 lis 2017 21:09
  • Win 7 - Alt + Tab mění jazyk klávesnice
    od Majkyz » 04 lis 2017 22:19 » v Windows 10, 8, 7, Vista, XP…
    0
    241
    od Majkyz
    04 lis 2017 22:19
  • Word - hromadné odstranění "pole datum"
    od Romaine » 22 led 2018 20:49 » v Kancelářské balíky
    1
    342
    od xlnc
    23 led 2018 15:29
  • Funkce DATEDIF
    od JakubKR » 11 kvě 2018 14:33 » v Kancelářské balíky
    3
    558
    od lubo.
    13 kvě 2018 23:17

Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: CommonCrawl [Bot] a 3 hosti