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 minutenk, 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?
(
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 minutenk, 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?