Quote:
Originariamente inviato da Unrue
Ciao a tutti,
avrei bisogno di un'informazione: in C++ l'operatore <<=2 per esempio, mi shifta di 2 posizioni verso destra una stringa es: 01101011 viene 10101100
E' possibile pero' shiftare mettendo gli 1 anzichè gli 0 in fondo? Stessa cosa per lo shift destro.
|
In C++, shiftare a sinistra (destra) di n posizioni equivale ad effettuare una multiplicazione (divisione) per 2^n tra interi.
Quindi non puoi fare quello che vuoi usando solo un'operazione di questo tipo.
Però: continua a leggere.
Quote:
Esempio vorrei che 01101011 divenisse, shiftando due volte a destra 11011010.Se è possibile, senza usare le maschere, altrimenti, se è l'unico modo, accetto anche consigli su quelle
|
Mi sa che senza maschere non si va da nessuna parte.
Supponiamo di voler fare uno "shift rotatorio" a destra, di una singola unità. (Il caso generale è più complicato, e non ho voglia di scrivere tutto 'sto codice adesso.) Allora che fai: memorizzi il bit meno significativo, poi shifti normalmente a destra, e poi imposti il nuovo valore del bit più significativo in modo che coincida col vecchio valore del bit meno significativo.
Una cosa del tipo:
Codice:
mybyte = ((unsigned char)mybyte >> 1) | ((mybyte & 0x1) << 7);