Stránka 1 z 1
Datový typ
Napsal: 07 dub 2020, 17:25
od rpoledna
Krásný den přeji,
prosím o radu, jak je možné, když zdám datový typ ... long a = 20 * 3600 , dostanu na zpět hodnotu 6464 . Co mi uniká ? 72 000 přece nemůže přetéct u hodnoty long, nebo se pletu ? Potřebuji uložit hodnotu celého dne v sekundách. Jen dodám pokud napíšu a = 72000 tak mi Serial.println vypíše 72 000. tak si říkám, že to mé Arduino neumí počítat

. Blbost. Co dělám špatně? Prosím pomoc!!!
Re: Datový typ
Napsal: 07 dub 2020, 18:02
od ArduXPP
Mělo by to být.
long aa = 20;
long bb = 3600;
long cc;
cc = aa * bb;
Re: Datový typ
Napsal: 07 dub 2020, 18:29
od ArduXPP
Vypadá to, že arduino ide použije 32bit u long a, ale u čísel použije 16bit. Asi nějaké nastavení v arduino ide, nebo to, že ty čísla nemají definováno long ale int

Re: Datový typ
Napsal: 07 dub 2020, 18:50
od pavel1tu
long a = 20L * 3600L;
u celých čísel a long mi myslím pomáhá toto
Re: Datový typ
Napsal: 07 dub 2020, 18:55
od ArduXPP
Proč je tam L ?
Re: Datový typ
Napsal: 07 dub 2020, 19:00
od pavel1tu
ArduXPP píše: ↑07 dub 2020, 18:55
Proč je tam L ?
Aby to bral jako long,
setkal jsem se s tím u DUE, kde mi to blblo,
testovali jsme to i na kroužku na UNO funguje to.
Neumím moc anglicky, ale vycházel jsem z tohoto :
If doing math with integers, at least one of the numbers must be followed by an L, forcing it to be a long. See the Integer Constants page for details.
long speedOfLight = 186000L; // see the Integer Constants page for explanation of the 'L'
Re: Datový typ
Napsal: 07 dub 2020, 19:08
od KamilV
Jak se vyhodnotí
?
1. Nejprve se uvažuje, že nějaký long = nějaký int * nějaký int
2. Int krát int je zase int
3. V závěru se int přetypuje na long (ale došlo u něj k "ořezání")
Jak se vyhodnotí
?
1. Nejprve se uvažuje, že nějaký long = číslo přetypované na long * číslo přetypované na long
2. Long krát long je zase long
3. V závěru je výsledek dle očekávání
Další možností by mohlo být např.
Re: Datový typ
Napsal: 07 dub 2020, 20:04
od rpoledna
Moc děkuji, už mi to jede ..já blbec dal long a = int 20 *3600 a divím se že to přeteče . Ještě jednou moc děkuji
Re: Datový typ
Napsal: 08 dub 2020, 07:12
od pavel1tu
rpoledna píše: ↑07 dub 2020, 20:04
Moc děkuji, už mi to jede ..já blbec dal long a = int 20 *3600 a divím se že to přeteče . Ještě jednou moc děkuji
Nejsi blbec,
příklady typu
long a = 20 * 3600 jsou na mnoha webech - samozřejmě blbě.
Další co je na platformě Arduino opravdu opruz - jsou knihovny.
Musíš se držet těch originálních, jak já říkám, každý kdo má v riti díru si udělá svůj fork (upravenou kopii),
tu většinou nějak ořezal nebo upravil kvůli něčemu.
Bohužel už se většinou nepíše seznam těchto úprav, natož aby implementoval změny a opravy co časem proběhly v původní knihovně.
Nebo tam po čase provede takové změny, opět bez jakékoliv dokumentace, že ti přestanou chodit původní projekty když se ti knihovna updatuje.
Takže je dobré si k projektům schovávat i zálohy knihoven - pro jistotu.
I dost příkladů na netu je nefunkčních, někdy chyba v kodu, někdy chyba ve schematu.
Lidi prostě něco postaví na stole, zveřejní, ale tím že to dlouhodobě neprovozují, uniknou jim drobné i zásadní chyby.
A o to je to zábavnější
