Ahoj,
co se myslí v programování výrazem dlouhá aritmetika? Nemůžu používat normální integer, protože se tam prý, tak dlouhé číslo nenarve. Takže asi použít spojáky, stromy?
Díky
long (dlouhý) je v C/C++ datový typ, který má oproti intu větší rozsah hodnot. Nemyslel jsi tohle?
#3 randomák
V případě překročení i takového datové typu a potřebě operovat s takhle velkými čísly ti nezbývá nic jiného než si vytvořit vlastní datový typ (a to ne pouze jako typedef ale kompletní třídu zabalující chování), typ, který s takovými čísly bude umět pracovat, nebo použít již existující knihovnu.
Ešte existuje long long.
Platí že sizeof(int) <= sizeof(long) <= sizeof(long long). Čiže int môže byť rovnako veľký ako long int...
http://www.cplusplus.com/doc/tutorial/variables/
Nevim, jaka je to knihovna, ale mi prijde inteligentni zapisovat
uint8 | unsigned short int
uint16 | unsigned int
uint32 | unsigned long int
uint64 | unsigned long long int
u jako unsigned, int jako integer a pocet bitu. Vsechno ostatni zapisy, co jsem zatim videl, jsou nesmysl, chaos, treba tady za tou carkou z cpp.
#9 peter
Mno chaos to možná je, ale dost možná ještě větší než si myslíš.
Původní typy (char,int,long) jsou definované tak jak jsou definované zřejmně kvůli snadnějšímu portování překladačů(pro portování aplikací to múže být i trochu nevýhoda, záleží jak je aplikace napsaná).
To přiřazení co jsi napsal platí jen na některých platformách/překladačích. Na modernějších překladačích (od C99) je proto, pokud potřebuješ konkrétní velikost typu,lepší používat standardizovaný #include <stdint.h> a typy jako int32_t atp. Mnohdy je to ale jedno a třeba pro for cyklus může být celkem jedno jaký typ číselné proměnné se použije pokud je dostatečně velký. Dokonce může být rychlejší použití int než uint8_t.
Jinak ty knihovny na práci s velkými čísly jsou většinou pro práci s opravdu opravdu velkými čísly kde ti již 64bitů nestačí.
#11 peter
:) mno pokud vim tak to plati tak akorat pokud pouzivas precompiled headers(VS studio t má v defaultu), což je tak trochu hack pro rychlou kompilaci, vlastne se to pak chova tak jako kdyz se na zacatek vsech c/cpp souboru vlozi include nekterych standardnich souboru. Bez tohoto, se naopak musi includovat skoro vsechno vcetne i tak základních věcí jako math a string.
No a s temi standardy, ono jich jak pro C tak pro C++ vznikla celá řada, za ty roky se specifikace nejen zpřesnila ale i rozrostla o nové věci. zkus zagooglit rozdíly třeba C89/C99 C++98/C++14 . Např. pokud si pamatuji správně tak treba v C89 zadne stdint.h -> uint32_t a podobne typy nebyly (ackoliv nektere C89 kompatibilni prekladace to pozdeji v sobe meli integrovano, ve standardu C89 to nebylo, az v C99)
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku