PDA

Visualizza la versione completa : [C] modificare i bit di un byte


misterx
17-01-2014, 17:44
ciao,
devo leggere un byte di cui non conosco il valore e mettere a 1 i bit che mi vengono passati indipendentemente se sono gi a 1.

Mi venuto in mente di fare una OR

byteletto=10000000
bitDaMettereAuno=3

risultato=10000100

10000000
00000100
----------
10000100

Se invece voglio mettere un bit a zero faccio una AND con 255


10000000
11111111
----------
10000000

corretto?

Scara95
17-01-2014, 18:31
Per quanto riguarda l'or corretto...
Un and con 255 ( 1111 1111 ) lascia invariato il numero...
Casomai devi fare un and ~(1<<(nbib-1))

#include <stdio.h>

void printBit(unsigned char c) {
int i;
for(i = 7; i >= 0; --i) {
printf("%d", (c>>i) & 1);
}
printf("\n");
}

int main(void) {
const int nbit1 = 3;
const int nbit2 = 7;
unsigned char c = 0;
printBit(c);
c |= (1u<<(nbit1-1));
c |= (1u<<(nbit2-1));
printBit(c);
c &= ~(1u<<(nbit1-1));
printBit(c);
return 0;
}

misterx
17-01-2014, 19:58
scusa intendevo rimettere a zero il bit 3

Scara95
17-01-2014, 20:11
Serve un and con ( 1111 1011 ) che puoi ottenere come ti ho mostrato sotto...

misterx
17-01-2014, 20:28
ops, ho visto l'errore

Loading