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.5
Master Level 8.5
Příspěvky: 7356
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

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?
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

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

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.5
Master Level 8.5
Příspěvky: 7356
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

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
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

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

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.5
Master Level 8.5
Příspěvky: 7356
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

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 ;-)
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

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

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 6
Level 6
Příspěvky: 3509
Registrován: leden 15
Bydliště: Krkonoše
Pohlaví: Muž
Stav:
Offline
Kontakt:

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.
PC: MSI RTX 4090 Suprim X, AMD Ryzen 9 7950x3D, ASUS Crosshair HERO X6670E, 64GB RAM@6000CL30, Fractal Define Torrent, Seasonic PRIME TX 1600W, SSD Seagate Firecuda 530 M2 2TB +
4TB + 4TB SATA Micron 5200 ECO
Periferie: Samsung Odyssey G9 Neo + 2x AOC AG271QG, Razer Deathadder, Ducky Shine7, Steelseries QcK+, Beyerdynamic MMX300, Valve Index

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7356
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Jazyk C - funkce a pole

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

"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

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

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
  • ErP - ,,nebezpečná" funkce? Příloha(y)
    od DifiCZ » 05 lis 2023 12:26 » v Vše ostatní (sw)
    11
    2286
    od WolfGunCZ Zobrazit poslední příspěvek
    09 lis 2023 13:16
  • Excel - funkce když
    od Martyn20 » 13 črc 2023 11:56 » v Kancelářské balíky
    5
    2314
    od mmmartin Zobrazit poslední příspěvek
    13 črc 2023 18:44

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

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 3 hosti