Discussione: Operatori logici C++
View Single Post
Old 21-07-2005, 20:48   #2
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16211
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);
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso