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