Nasobenie v C.

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
Rako
Příspěvky: 40
Registrován: 29 bře 2014, 00:00

Nasobenie v C.

#1 Příspěvek od Rako »

Chcem sa spýtať niekoho kto je zbehlejší v programovaní v Céčku, na násobenie hodnoty ktorá je uložená v poli.

Máme dané pole typu byte:

byte pole[3] = {100,200,300};

a premennú na uloženie výsledku:

int cislo;

a potrebujem násobiť položku v poli desiatimi.

cislo = pole[1] * 10;

Takýto zápis ale nefunguje.
výsledok by mal byť 2000 ale je iba 208. V diassembleri som zistil že sa do výstupnej premennej preniesol iba dolný byte výsledného čísla.

Zatiaľ čo tento zápis normálne funguje :

cislo = pole[1];
cislo *= 10;

Výsledok je skutočne 2000.

Ešte dodám že kompilátor je C18 v MPLABe a program je pre PIC18f.
Vie niekto prečo je tomu tak?
Uživatelský avatar
mikollar
Příspěvky: 1477
Registrován: 26 pro 2004, 00:00
Bydliště: Košice - okolie

#2 Příspěvek od mikollar »

skus takto ((int)pole[1]) * 10; "cislo" musi byt tiez int nie byte, byte je len do 255
Uživatelský avatar
Rako
Příspěvky: 40
Registrován: 29 bře 2014, 00:00

#3 Příspěvek od Rako »

Čo to spôsobí ?
Pretypovanie jednej položky typu byte z poľa, na integer?
Alebo sa pretypuje celé pole?
Uživatelský avatar
mikollar
Příspěvky: 1477
Registrován: 26 pro 2004, 00:00
Bydliště: Košice - okolie

#4 Příspěvek od mikollar »

malo by to byte zmenit na int a tak prenasobit,

niekedy mi to robilo podobny problem ako tebe,
ked som robil s unsigned char a nasobil na vacsie cislo ako 255
Uživatelský avatar
Rako
Příspěvky: 40
Registrován: 29 bře 2014, 00:00

#5 Příspěvek od Rako »

To je presne ono,ďakujem.
Uživatelský avatar
Zaky
Příspěvky: 7050
Registrován: 30 říj 2010, 00:00
Bydliště: Praha

#6 Příspěvek od Zaky »

Tuhle jsem se s tím taky vyvztekal, počítal jsem trochu delším vzorcem s násobením a sčítáním integerů výsledek typu long long int a ono mi to tvořilo jen integer, ze stejných důvodů. Tady je to vysvětlené: http://stackoverflow.com/questions/2235 ... -int-types
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“