Bit av en byte

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
ankan
Inlägg: 1091
Blev medlem: 12 november 2004, 01:50:35

Bit av en byte

Inlägg av ankan »

Hur får man fram en bit ur en bit enkelt i ANSI C?

Det borde finnas något smidigare sätt än:

RB0=(byte>>4)&0x01; // För att ge bit0 på PortB, värdet av bit4 i variabel byte.

Kan man inte typ skriva RB0=byte,4

Kör Hi-Tech Pic C.
Användarvisningsbild
Icecap
Inlägg: 26650
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Nu beror det på hur kompilern behandlar datan men jag har iblant gjort så:
Resultat = (Inkommande & 0x10) && 1;
Detta tvinger den att omvandla '(Inkommande & 0x10)' till true/false tack vara '&& 1'
henkebenke
Inlägg: 520
Blev medlem: 31 maj 2003, 10:42:37
Ort: Helsingborg

Inlägg av henkebenke »

true/false finns inte i C. Det finns 0 och skilt från 0. Så det enda man bestämt kan säga om "Resultat" i ditt exempel är att den kommer få ett värde som inte är noll. Däremot är sannolikheten stor att den kommer bli 1 men det är egentligen helt odefinierat. En optimerande kompilator borde se till att ta bort jämförelsen "&& 1" eftersom den egentligen inte förändrar resultatet.

Det enda sättet som jag ser det är egentligen att använda en struct med bitfields för varibeln "byte" så att man kan bit-adressera i variabeln. För att hitta ett enklare eller effektivare uttryck för att göra operationen finns nog inte.
macgyver
Inlägg: 321
Blev medlem: 8 juni 2005, 00:24:09
Ort: Göteborg
Kontakt:

Inlägg av macgyver »

RB0 = byte & bit ? 1 : 0;
lär väl fungera annars också
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Några rader inline-asm med BTFSC/BTFSS ?
Men det kanske är "fusk"... :-)
Användarvisningsbild
björn
EF Sponsor
Inlägg: 2570
Blev medlem: 29 mars 2004, 23:09:55

Inlägg av björn »

sodjan skrev:Några rader inline-asm med BTFSC/BTFSS ?
Men det kanske är "fusk"... :-)
Nej, men fegt :D
Skriv svar