Ho cercato di risolvere questo problema per un po ', ma non ho potuto con operatori aritmetici e bit a bit interi. Tuttavia, penso che sia possibile e dovrebbe essere abbastanza facile. Cosa mi manca?Il modo più veloce per calcolare una maschera di bit X-bit?
Il problema: per ottenere un valore intero di lunghezza arbitraria (questo non è rilevante per il problema) con la sua X bit meno significativi set a 1 e il resto a 0. Ad esempio, dato il numero 31, I è necessario ottenere un valore intero uguale a 0x7FFFFFFF (31 bit meno significativi sono 1 e gli zeri restanti).
Ovviamente, l'utilizzo di un ciclo OR di un 1 spostato su un numero intero X volte farà il lavoro. Ma questa non è la soluzione che sto cercando. Dovrebbe essere più nella direzione di (X << Y - 1)
, quindi senza loop.
Non dovrebbe, a patto che lanci 1 su uint prima (non so C#, quindi non so come). Quindi verrà valutato su 0 - 1, ovvero 32 1 su una macchina a 32 bit. – doublep
Hai la soluzione che stavo cercando. Semplice e lineare, senza loop. E quando X è uguale alla lunghezza del bit del numero intero, tutti i bit diventano 1 come previsto. Funziona anche con la minuscola dove X = 0. Grazie. – Virtlink