ciao,sto frequentando un corso di c++ e il professore oggi ha spiegato questo esercizio...controllato al compilatore funziona perfettamente,anke se ci sono alcune coseke mi sn poco chiare....chi mi potrebbe dare una spiegazione un po + precisa di alcune fasi dell'algoritmo ke ho evidenziato in rosso?grazie
//ruotare a destra o a sinistra di n bit
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
void visualizza_in_bit (short , short []);
void ruota_dx(short , short []);
void ruota_sx(short , short []);
void main()
{
short A, bit[16];
int direzione;
printf("inserisci un numero\n");
scanf("%hd", &A);
visualizza_in_bit(A,bit);
printf("\nDigita 1 per shiftare a destra oppure 2 per shiftare a sinistra\n");
scanf("%d", &direzione);
if (direzione==1)
ruota_dx(A, bit);
if (direzione==2)
ruota_sx(A, bit);
printf("\n");
system("PAUSE");
}
void visualizza_in_bit(short num, short b[16]) //function di visualizzazione in bit
{
int conta, a, i;
conta=0;
a=1; <---XKè METTE LA VARIABILE A E LA INIZIALIZZA AD 1
for (i=15;i>=0;i--)
{
b[i]=a# <---NELL'ARRAI b COSA METTE I BIT NUM OPPURE I BIT DI a.KE FUNZIONA HA IN QUESTO CASO L' &.
num=num>>1;
}
printf("la rappresentazione in binario e': ");
for (i=0;i<=15;i++)
{
printf ("%d",b[i]);
conta++;
if (conta==4)
{
printf (" ");
conta=0;
}
}
printf("\n");
}
void ruota_dx(short A, short bit[16])
{
short n, B;
printf("\nDi quanti bit vuoi shiftare la sequenza verso destra?\n");
scanf("%hd", &n);
B= (short)pow(2,n)-1; //maschera con tutti zero e tanti 1 quanti sono i bit da shiftare
B= B&A; //copia i primi n bit di A in B
A= A>>n; //shifta A di n posizioni a destra
B= B<<(16-n); //shifta B di 16-n posizioni a sinistra
A= A | B; <----LA OR IN PRATICA KE OPERAZIONE FA...A COSA SERVE QUI.
visualizza_in_bit(A, bit);
}
void ruota_sx(short A, short bit[16])
{
short n,B;
printf("\nDi quanti bit vuoi shiftare la sequenza verso sinistra?\n");
scanf("%hd", &n);
B= (short)pow(2,n)-1; //maschera con tutti zero e tanti 1 quanti sono i bit da shiftare
B=B<<(16-n); //shifta a sinistra in modo da trovarsi gli 1 in posizione più significativa
B= B&A; //copia i primi n bit di A in B
A= A<<n; //shifta A di n bit verso sinistra
B= B>>(16-n); //shifta B di 16-n posizioni a destra
A= A | B;
visualizza_in_bit(A, bit);
}