PDA

View Full Version : [C++] Operare sui bit


djpeppe
30-05-2011, 12:33
ciao,
se ho un byte con 00100000 e voglio cambiare ragionare solo sul sesto bit da destra (l'1) come posso fare.
nella mia idea ogni bit ha un suo significato, e perciò non voglio ragionare su tutto il byte ma solo su un bit. con quali funzioni posso prelevare un bit e modificarlo?

GByTe87
30-05-2011, 12:44
Usa le maschere di bit e i bitwise operator.

Se vuoi impostare a 1 il sesto bit basta che fai..

tuoByte = tuoByte | 00100000;

Se vuoi impostarlo a zero...

tuoByte = tuoByte & 11011111;

Considera che il numero dopo l'operatore bitwise lo devi esprimere come decimale o esadecimale.

Altrimenti, potresti usare il container STL bitset (http://www.cplusplus.com/reference/stl/bitset/).

tuccio`
30-05-2011, 12:47
per creare una mask 0 .. 0 1 0 0 0 0 0 (solo un uno al sesto bit) così:


unsigned int mask = 1 << 5; // errata corrige


quindi se vuoi il valore del sesto bit nella variabile x ti basta fare un end bitwise:


if (mask & x)
{
// il sesto bit in x è 1
}
else
{
// è zero
}


se vuoi modificare solo il sesto bit puoi usare mezzi simili, magari con lo xor bitwise


x = x ^ mask


gli zeri sono elementi neutri dello xor, mentre l'uno al sesto bit complementa (1 ^ 1 = 0 e 0 ^ 1 = 1)

marco.r
30-05-2011, 15:05
per creare una mask 0 .. 0 1 0 0 0 0 0 (solo un uno al sesto bit) così:


unsigned int mask = 1 << 6;


Quello e' il settimo bit

!fazz
30-05-2011, 15:31
ciao,
se ho un byte con 00100000 e voglio cambiare ragionare solo sul sesto bit da destra (l'1) come posso fare.
nella mia idea ogni bit ha un suo significato, e perciò non voglio ragionare su tutto il byte ma solo su un bit. con quali funzioni posso prelevare un bit e modificarlo?

devi mascherare

se vuoi forzarlo a 1 fai una or

variabile |=0x20;
se vuoi forzarlo a zero
variabile&=0xDF;

per il confronto prima mascheri e poi confronti



if (( variabile& 0x20)== 0x20)
{
//bit6=1
}

tuccio`
30-05-2011, 16:20
Quello e' il settimo bityup, my fault

sottovento
31-05-2011, 09:01
ciao,
se ho un byte con 00100000 e voglio cambiare ragionare solo sul sesto bit da destra (l'1) come posso fare.
nella mia idea ogni bit ha un suo significato, e perciò non voglio ragionare su tutto il byte ma solo su un bit. con quali funzioni posso prelevare un bit e modificarlo?

In alternativa puoi definire una struttura con mappa a bit:


struct MyStruct
{
int b0: 1;
int b1: 1;
int b2: 1;
int b3: 1;
int b4: 1;
int b5: 1;
int b6: 1;
int b7: 1;
}


Puoi quindi accedere come struttura.b6.