Datový typ

Odpovědět
rpoledna
Příspěvky: 2
Registrován: 07 dub 2020, 17:18
Reputation: 0

Datový typ

Příspěvek od rpoledna » 07 dub 2020, 17:25

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!!!

ArduXPP
Příspěvky: 361
Registrován: 14 pro 2017, 19:31
Reputation: 0
Kontaktovat uživatele:

Re: Datový typ

Příspěvek od ArduXPP » 07 dub 2020, 18:02

Mělo by to být.

long aa = 20;
long bb = 3600;
long cc;

cc = aa * bb;

ArduXPP
Příspěvky: 361
Registrován: 14 pro 2017, 19:31
Reputation: 0
Kontaktovat uživatele:

Re: Datový typ

Příspěvek od ArduXPP » 07 dub 2020, 18:29

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 :)

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Datový typ

Příspěvek od pavel1tu » 07 dub 2020, 18:50

long a = 20L * 3600L;

u celých čísel a long mi myslím pomáhá toto
Naposledy upravil(a) pavel1tu dne 07 dub 2020, 18:58, celkem upraveno 1 x.
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

ArduXPP
Příspěvky: 361
Registrován: 14 pro 2017, 19:31
Reputation: 0
Kontaktovat uživatele:

Re: Datový typ

Příspěvek od ArduXPP » 07 dub 2020, 18:55

Proč je tam L ?

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Datový typ

Příspěvek od pavel1tu » 07 dub 2020, 19:00

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'
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: Datový typ

Příspěvek od KamilV » 07 dub 2020, 19:08

Jak se vyhodnotí

Kód: Vybrat vše

long a = 20 * 3600
?
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í

Kód: Vybrat vše

long a = 20L * 3600L
?
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ř.

Kód: Vybrat vše

long a = (long) 20 * 3600

rpoledna
Příspěvky: 2
Registrován: 07 dub 2020, 17:18
Reputation: 0

Re: Datový typ

Příspěvek od rpoledna » 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

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Datový typ

Příspěvek od pavel1tu » 08 dub 2020, 07:12

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ší ;)
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Odpovědět

Kdo je online

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