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: 6045
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?


Nejhroznější sen linuxáka: nabootuje počítač, a tam Windows.
Nejhroznější sen windowsáka: nabootuje počítač, a tam Linux.
Nejkrásnější sen linuxáka: nabootuje počítač, a tam Linux.
Nejkrásnější sen windowsáka: nabootuje počítač.

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: 6045
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
Nejhroznější sen linuxáka: nabootuje počítač, a tam Windows.
Nejhroznější sen windowsáka: nabootuje počítač, a tam Linux.
Nejkrásnější sen linuxáka: nabootuje počítač, a tam Linux.
Nejkrásnější sen windowsáka: nabootuje počítač.

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: 6045
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 ;-)
Nejhroznější sen linuxáka: nabootuje počítač, a tam Windows.
Nejhroznější sen windowsáka: nabootuje počítač, a tam Linux.
Nejkrásnější sen linuxáka: nabootuje počítač, a tam Linux.
Nejkrásnější sen windowsáka: nabootuje počítač.

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: 2660
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: ASUS ROG SWIFT, 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: 6045
Registrován: prosinec 10
Pohlaví: Muž

Re: Jazyk C - funkce a pole

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

Nejhroznější sen linuxáka: nabootuje počítač, a tam Windows.
Nejhroznější sen windowsáka: nabootuje počítač, a tam Linux.
Nejkrásnější sen linuxáka: nabootuje počítač, a tam Linux.
Nejkrásnější sen windowsáka: nabootuje počítač.

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
  • Jazyk C Cykly
    od syrdava14 » 24 led 2017 13:53 » v Programování a tvorba webu
    1
    317
    od faraon
    24 led 2017 17:08
  • 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
    723
    od second32
    08 lis 2017 21:09
  • Jazyk C-podmíněné příkazy-pomoc
    od syrdava14 » 23 led 2017 21:46 » v Programování a tvorba webu
    6
    410
    od syrdava14
    24 led 2017 10:23
  • Win 7 - Alt + Tab mění jazyk klávesnice
    od Majkyz » 04 lis 2017 22:19 » v Windows 10, 8, 7, Vista, XP…
    0
    173
    od Majkyz
    04 lis 2017 22:19
  • funkce bezdrátového připojení
    od hlavenak » 29 lis 2017 19:46 » v Sítě - hardware
    2
    99
    od hlavenak
    29 lis 2017 20:34

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

Kdo je online

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