[Arduino] Pointer operator?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
SpanCox
Inlägg: 157
Blev medlem: 17 oktober 2004, 18:08:23
Ort: Götlaborg?

[Arduino] Pointer operator?

Inlägg av SpanCox »

Jag skulle behöva hjälp med att uttyda vad " & 0x1f " gör i exemplet nedan.

Jag tror mig ha förstått att det är en pointer operator, med vad en sådan gör och framför allt vad den tillför i mitt exempel nedan tycks mig väl förborgat.

Kod: Markera allt

buttonCounter1 = 8
const byte brightnessLookup1 [] = {0, 1, 4, 9, 14, 20, 27, 35, 44, 55, 69, 86, 107, 133, 165, 206, 255};

outputValue1 = brightnessLookup1 [buttonCounter1 & 0x1f] ;
outputValue2 = brightnessLookup1 [buttonCounter1] ;
Värdena blir ju 35 i båda fallen, så vad är det för magiskt som " & 0x1f "skall utföra?
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Re: [Arduino] Pointer operator?

Inlägg av Micke_s »

0x1f tar ut de 5 lägsta bitarna bara, antagligen för att inte gå utanför tabellen. Fast det hjälper ju inte riktigt eftersom det är mindre än 32 (2^5) värden i tabellen.

Om du har en tabell som har antal värden jämt delbart med 2^i så kan du köra en räknare som slår "runt" så att säga tidigare än vad hela 8 bits talet gör.

exempel, tabell med 2^3 värden (8 st)

table[] = {0, 1, 2, 3, 4, 5, 6, 7};
cnt++;
output = table[cnt & (2^3-1)];
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: [Arduino] Pointer operator?

Inlägg av sodjan »

Och bara för att förtydliga så har det inte ett smack med "pointers" att göra.
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Re: [Arduino] Pointer operator?

Inlägg av Micke_s »

tack sodjan: glömde bort medans jag skrev vad rubriken var.
Användarvisningsbild
Icecap
Inlägg: 26652
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: [Arduino] Pointer operator?

Inlägg av Icecap »

I C kan det vara ganska svårt att veta men '&' är logisk AND på bit-nivå, '&&' är logisk AND på "heltalsnivå" - men i andra sammanhang kan det betyda "Adressen på vaddetnuär", alltså en pointer.

Den rätta betydelse beror på sammanhanget och i detta fall är det fullständigt korrekt vad Micke_s och sodjan skriver.
SpanCox
Inlägg: 157
Blev medlem: 17 oktober 2004, 18:08:23
Ort: Götlaborg?

Re: [Arduino] Pointer operator?

Inlägg av SpanCox »

Micke_s skrev:0x1f tar ut de 5 lägsta bitarna bara, antagligen för att inte gå utanför tabellen. Fast det hjälper ju inte riktigt eftersom det är mindre än 32 (2^5) värden i tabellen.

Om du har en tabell som har antal värden jämt delbart med 2^i så kan du köra en räknare som slår "runt" så att säga tidigare än vad hela 8 bits talet gör.

exempel, tabell med 2^3 värden (8 st)

table[] = {0, 1, 2, 3, 4, 5, 6, 7};
cnt++;
output = table[cnt & (2^3-1)];
Tack för ett mycket utförligt och kompetent svar! :tumupp:
Skriv svar