Sida 1 av 1
Bit av en byte
Postat: 5 maj 2006, 11:41:16
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.
Postat: 5 maj 2006, 11:46:40
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'
Postat: 7 maj 2006, 21:48:30
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.
Postat: 7 maj 2006, 22:09:33
av macgyver
RB0 = byte & bit ? 1 : 0;
lär väl fungera annars också
Postat: 7 maj 2006, 22:40:22
av sodjan
Några rader inline-asm med BTFSC/BTFSS ?
Men det kanske är "fusk"...

Postat: 7 maj 2006, 22:59:06
av björn
sodjan skrev:Några rader inline-asm med BTFSC/BTFSS ?
Men det kanske är "fusk"... :-)
Nej, men fegt :D