Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- ///Si vuole realizzare un programma che mediante l'uso dei bitwise permetta di stampare la sequenza di bit
- ///a esso associato partenzo dal size del tipo di variabile passata
- ///Prototipi di Funzione
- void stampa_bit()
- {
- system("cls");
- char num; ///Poichè non abbiamo a disposizione i Template dovremmo realizzare 3 funzioni uguali ma indipendenti rispetto al tipo di ogni singola variabie,
- ///per questioni di praticità andiamo a modificare ogni volta il tipo di num per verificarne il corretto funzionamento
- ///Usa una volta 'char' una volta 'short' una volta 'int' e così via....
- ///Ricorda!!! Gli operatori bitwise funzionano SOLO su tipi numerici!!!
- char i;
- printf("Inserisci un numero: ");
- scanf("%d",&num); ///Anche se sembra ambiguo un CHAR è un tipo numerico!
- for(i=sizeof(num)*8-1;i>=0;i--) ///Setto un ciclo in grado di determinare a partire dal tipo della variabile "num" il numero di bit da verificare
- (i%4 == 0) ? printf("%c ",(num&1<<i)?'1':'0'):printf("%c",(num&1<<i)?'1':'0');
- ///L'esempio qui sopra utilizza la forma contratta dell'if e gli operatori bitwise
- ///La scrittura sopra equivale a dire
- ///Se ho un gruppo di 4 bit (dato confermato dal fatto che l'operatore % determini il resto della divisione per 4 nel nostro caso) sia uguale a 0
- ///Stampa il bit corrispettivo seguito da uno spazio
- ///Altrimenti stampalo semplicemente
- ///Passiamo ora ad analizzare la scrittura (num&1<<i)?'1':'0'
- ///Equivale a: confronta il bit 1 "shiftato" di i posizioni e mettilo in "AND" (inteso come porta logica e rappresentato da &) con il valore di num
- ///Se la relazione è vera (?) allora stampa '1' se è falsa (:) stampa '0'
- putchar('\n');
- system("pause");
- }
- void scambia_var()
- {
- system("cls");
- int a,b;
- printf("Inserisci il primo numero: ");
- scanf("%d",&a);
- printf("Inserisci il secondo numero: ");
- scanf("%d",&b);
- a=a^b;
- b=a^b;
- a=a^b;
- printf("Primo numero: %d, Secondo numero: %d",a,b);
- putchar('\n');
- system("pause");
- }
- int main()
- {
- char scelta;
- do
- {
- system("cls");
- printf("*******RIEPILOGO BITWISE*******\n");
- printf("Per eseguire 'Stampa_Bit'......Premi 1\n");
- printf("Per eseguire 'Scambia_Var'.....Premi 2\n");
- printf("Per Uscire.....................Premi 0\n");
- fflush(stdin);
- scanf("%d",&scelta);
- switch(scelta)
- {
- case 1:stampa_bit(); break;
- case 2:scambia_var(); break;
- case 0:
- {
- printf("Arresto in corso.....");
- return 0;
- }
- default:
- {
- printf("Scelta non valida!\n");
- system("pause");
- }
- }
- }while(scelta!=0);
- }
Add Comment
Please, Sign In to add comment