Bryta upp ett nummer och ladda in i en array

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
stekern
Inlägg: 453
Blev medlem: 2 november 2008, 08:24:18
Ort: Esbo, Finland

Re: Bryta upp ett nummer och ladda in i en array

Inlägg av stekern »

jesse skrev: /************ Här kommer överkurs för oss programmeringstokiga:

När man loopar en variabel, i och sedan gör (1 << i) inne i loopen kan det kanske ta en massa onödig tid, om den i varje varv ska shifta i antal gånger. Nu kan det hända att GCC ser dett och optimerar bort det, men om den inte gör det , så är detta alltså ett klumpigt sätt för processorn att shifta ett åttabitars tal. **************/


Jag hade gjort så här:

Kod: Markera allt

for (i = 0; i<8 ; i++) {
    send(data & 1);
    data >> 1;
}
Variablen data förstörs visserligen i operationen, men då det ändå sker inne i en funktion sendByte() så bör det inte spela någon roll då variabeln är lokal.
Du har en bugg i din kod, det saknas ett '=' ;)
Om processorn i fråga har tillgång till en barrel shifter så är en sådan optimering onödig,
men nu var det fråga om en avr som inte har en sådan, så bra tips!
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Bryta upp ett nummer och ladda in i en array

Inlägg av jesse »

ja, den buggen har jag gjort flera gånger , i "riktiga" program, som sedan betett sig väldigt konstigt :vissla:

ska vara

Kod: Markera allt

data >>= 1;
eller för att vara tydlig

Kod: Markera allt

data = data >> 1;
Skriv svar