Domanda

Di 'Ho un byte come questo 1010XXXX dove i valori X potrebbe essere qualsiasi cosa. Voglio impostare i quattro bit inferiori ad un modello specifico, dire 1100, lasciando i quattro bit superiori inalterati. Come faccio a fare questo il più veloce in C?

È stato utile?

Soluzione

È possibile impostare tutti i bit a 0 dal bit-AND con i 4 bit impostato a 0 e tutti gli altri set a 1 (Questo è il complemento dei 4 bit impostati a 1). È quindi possibile bit a bit-o nei bit come si farebbe normalmente.

es

 val &= ~0xf; // Clear lower 4 bits. Note: ~0xf == 0xfffffff0
 val |= lower4Bits & 0xf; // Worth anding with the 4 bits set to 1 to make sure no
                          // other bits are set.

Altri suggerimenti

In generale:

value = (value & ~mask) | (newvalue & mask);

mask è un valore con tutti i bit da modificare (e solo loro) impostati a 1 - sarebbe 0xf nel tuo caso. newvalue è un valore che contiene il nuovo stato di quei bit -. tutti gli altri bit sono essenzialmente ignorati

per i quali sono supportati questo lavoro per tutti i tipi di operatori bit a bit.

Usa operatore OR bit a bit | quando si desidera cambiare il bit di un byte da 0 a 1.

Usa bit a bit operatore ed e quando si desidera cambiare il bit di un byte 1-0

Esempio

#include <stdio.h>

int byte;
int chb;

int main() {
// Change bit 2 of byte from 0 to 1
byte = 0b10101010;    
chb = 0b00000100;       //0 to 1 changer byte
printf("%d\n",byte);    // display current status of byte

byte = byte | chb;      // perform 0 to 1 single bit changing operation
printf("%d\n",byte);

// Change bit 2 of byte back from 1 to 0
chb = 0b11111011;       //1 to 0 changer byte

byte = byte & chb;      // perform 1 to 0 single bit changing operation
printf("%d\n",byte);
}

Forse ci sono modi migliori, non so. Questo vi aiuterà per ora.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top