Basic C vraag.

J

Jos Brink

Guest
Ok, ik had een fout in mijn software.eens een kijkje op deze kleine code:

(
unsigned char i, j, ptr1 *, * ptr2, temp, x_max, y_max;
unsigned char rij_index;
unsigned int row_offset, bitmap_offset;

row_offset = x_max * rij_index;
)

in dit geval x_max = 122, en rij_index varieert van 0 tot 3.

tijdens deze vermenigvuldigen, row_offset kreeg verkeerde waarden.Door het veranderen van rij_index een unsigned int, het probleem was voorbij.

Kan iemand uitleggen waarom rij_index moet een int in plaats van een char, en x_max niet?

Thnx.btw: Ik gebruik CodevisionToegevoegd na 20 minuten:eek:k, schreef ik een kleine test programma om uit te zoeken wat er gebeurt.

unsigned int k, z;
unsigned char i, j, x, y;

(
x = 122;
i = 122;

for (y = 0; y <8; y )
(
z = x * y;
putchar (z>> 8);
putchar (Z & 0x00ff);
)

/ / Output was: 0000, 007A, 00F4, 006E, 00E8, 0062, 00DC, 0056

z = 122;

for (j = 0; j <8; j )
(
k = z * j;
putchar (k>> 8);
putchar (K & 0x00ff);
)
)

/ / Output was: 0000, 007A, 00F4, 016E, 01E8, 0262, 02DC, 0356Het lijkt erop dat een van de twee variabelen moet een int, maakt niet uit welke.
Is de compiler gebruik maken van de variabelen ook voor tijdelijke opslag?

 
int = uchar * uchar;
wanneer compiler * ziet dit, is het vermenigvuldigen en het resultaat is van het type uchar (8 bits waarde) & ik denk dat 3 * 122 heeft meer dan 8 bits opslag.wat de compiler zal doen in dit geval zal truncate de meest significante bits & houden alleen de 8least Ones.
Voor de opdracht, vind het LHS is unsigned int dus het zal uitbreiden naar uchar uint door nullen.Thats waarom het resultaat verschilde.
Om dan komen dient u een van de vermenigvuldiging operanden gegoten om het resultaat te type in om de andere opernad bevorderen om het resultaat te type en houdt de gegevens voordat afgekapt.
Groeten,
Amraldo.

 
Klinkt als je compiler is geen ANSI C conform.Het moet automatisch het promoten van uw twee unsigned char waarden int voordat zij hen vermenigvuldigt.

De CodeVisionAVR 1.24.7 handleiding beschrijft een compiler instelling "bevorderen char op" int voor ANSI compatibiliteit.Probeer het.

 

Welcome to EDABoard.com

Sponsor

Back
Top