View Full Version : [C++] Operare sui bit
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?
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/).
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)
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
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
}
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.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.