- Servirsi di Help|Contents|Cerca|bitwise operators del Turbo C
per la descrizione, in particolare, degli operatori 'shift'. Analizzare a questo proposito il programma seguente e il suo risultato.
# include <stdio.h>
main(){
unsigned int shift;
printf(" decimale ottale esadecimale \n\n");
for (int i=0; i<17; i++){
shift = 1 << i;
printf("1 << %2d %6u %6o %6X \n",i, shift,shift,shift);
}
}
- Analizzare il seguente programma:
# include <stdio.h>
main(){
unsigned int num=25;
unsigned int pot2=1;
for (int i=0; i<16; i++){
printf("%u & 2^%d = %d\n",num,i,num & pot2);
pot2 = pot2 << 1;
}
}
- confrontare il precedente programma con il seguente:
# include <stdio.h>
main(){
unsigned int num;
unsigned int pot2_15= 1<<15;
printf("Introduci un numero intero positivo : ");
scanf("%u",&num);
printf("\n\n%u = ",num);
for (unsigned int pot2=1; pot2 < pot2_15; pot2=pot2<<1)
printf("%u + ",num & pot2);
printf("%u ",num & pot2);
}
- modificare uno dei precedenti programmi per ottenere
ancora la codifica in binario di un numero decimale
- servirsi del seguente programma per analizzare l'operazione di somma binaria
in binario
# include <stdio.h>
# define pot2_15 1<<15
main(){
unsigned int num1,num2;
printf("Introduci un numero intero non negativo: ");
scanf("%u",&num1);
printf(" --> ");
for (unsigned int pot2=pot2_15; pot2>0; pot2>>1)
printf("%u",(num1 & pot2)?1:0);
printf("\nIntroduci un altro numero intero non negativo: ");
scanf("%u",&num2);
printf(" --> ");
for (pot2=pot2_15; pot2>0; pot2>>=1)
printf("%d",(num2 & pot2)?1:0);
printf("\n somma\n --> ");
for (pot2=pot2_15; pot2>0; pot2>>=1)
printf("%d",((num1 + num2) & pot2)?1:0);
}
- Modificare il programma inserendo opportunamente la riga
num2 = ~num2+1;
per rappresentare la differenza binaria mediante la somma del primo numero con il complemento a uno del secondo numero più uno.