Qui voglio generare un modello di bit per impostare n
cifre pari a 1
a partire dalla posizione p
. Le cifre sono numerate da 0 to 31
. Il seguito è quello che ho fatto.Generazione di un particolare schema di bit utilizzando operatori bit a bit
int bitPattern(int n, int p) {
int hex, num1, num2;
hex = 0x80000000;
num1 = (hex >> (31 - p));
num2 = (hex >> (31 - (n+p)));
return num1^num2;
}
Esempio:
bitPattern(6, 2) should return
..000011111100
eventuali soluzioni alternative con meno operatori?
Si sta invocando un comportamento non definito quando 'n + p> 31'. Se è garantito che non si verifichi mai, hai ancora un comportamento definito dall'implementazione che sposta a destra un numero negativo. Ma se non hai paura di UB, che dire '((1 << n) - 1) << p'? –
@DanielFischer nel mio problema '(n + p)' non andrà oltre 31. ed è facile identificare anche ... – noufal
Ad ogni modo, se ti interessano solo i bit, ti consiglio di usare un tipo senza segno, e quindi '((1 << n) - 1) << p' è sicuro a meno che' n' o 'p' siano negativi o maggiori o uguali alla larghezza del tipo. –