>>> Shift right zero fill – C#.Net porting

Ho passato un po’ di tempo a cercare in .Net una soluzione per tradurre l’operatore >>> usato in javascript.
Non l’ho trovata.

Allora mi sono scritto una piccola funzione che fa la stessa cosa ma deve essere modificata se la variabile è un Int32 oppure un Int64. Preferibilmente utilizzerei UInt32 / UInt64.
La modifica da fare è cambiare la costante 32 o 64.

La funzione “Shift right zero fill” a differenza dello shift right comune ( >> ), aggiunge 0 a destra del numero binario. Anche >> aggiunge 0 ma solo se il numero è positivo…

Questa funzione non fa altro che :

  • Fare il right bit shift comune ( >> )
  • Comporre una maschera di bit con tanti zero a dx quanti sono i bit shiftati e il resto della maschera a 1, e poi fare un AND logico.

la funzione è la seguente:

        private UInt32 shiftrZeroFill(UInt32 number, Int32 bits) {
            UInt32 p = UInt32.MaxValue;
            UInt32 r = ~((p >>= (32 - bits)) << (32 - bits));
            return (number >> bits) & r;
        }
Questa voce è stata pubblicata in .Net e contrassegnata con , , , , . Contrassegna il permalink.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.