Stránka 1 z 1

Nasobenie v C.

Napsal: 20 říj 2016, 18:45
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?

Napsal: 20 říj 2016, 19:03
od mikollar
skus takto ((int)pole[1]) * 10; "cislo" musi byt tiez int nie byte, byte je len do 255

Napsal: 20 říj 2016, 19:10
od Rako
Čo to spôsobí ?
Pretypovanie jednej položky typu byte z poľa, na integer?
Alebo sa pretypuje celé pole?

Napsal: 20 říj 2016, 19:12
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

Napsal: 20 říj 2016, 19:14
od Rako
To je presne ono,ďakujem.

Napsal: 20 říj 2016, 21:03
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