Utilizzo dell'operatore bit a bit come è possibile verificare se i bit meno significativi di un numero intero sono tutti set o non set.Come posso verificare se tutti i bit sono impostati o tutti i bit no?
Ad esempio if n = 3
Ho solo cura circa 3 bit meno significativi Il test deve restituire true per 0 e 7 e false per tutti gli altri valori tra 0 e 7.
Naturalmente ho potuto fare if x = 0 or x = 7
, ma avrei preferisci qualcosa usando operatori bit a bit.
Punti bonus se la tecnica può essere adattata per tenere conto di tutti i bit definiti da una maschera.
Chiarimento:
Se ho voluto mettere alla prova se il bit uno o due è impostato che potevo per if ((x & 1 != 0) && (x & 2 != 0))
. Ma potrei fare il "più efficiente" if ((x & 3) != 0)
.
Sto cercando di trovare un "trucco" come questo per rispondere alla domanda "Tutti i bit di x che corrispondono a questa maschera sono tutti impostati o tutti annullati?"
Il modo più semplice è if ((x & mask) == 0 || (x & mask) == mask)
. Mi piacerebbe trovare un modo per farlo in una singola prova senza || operatore.
Qual è il caso d'uso? Perché vuoi un metodo del genere –
Mi interessano gli hack di manipolazione dei bit leggendo qui https://graphics.stanford.edu/~seander/bithacks.html e sto cercando di trovare un modo per testare se tutti i bit di un mascherato sono tutti o 1 o tutti 0. È solo curiosità, mi chiedo se può essere fatto. –
diverse risposte commettono l'errore di scrivere '1 << n'. Ciò causa un comportamento indefinito se 'n> = 31' (se sei su un sistema int a 32 bit). Il '1' deve essere castato per essere di tipo unsigned che sia largo almeno quanto il valore che stai testando. –