nicb

Stampa e scambia bit compresso

Dec 19th, 2017
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.01 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. ///Si vuole realizzare un programma che mediante l'uso dei bitwise permetta di stampare la sequenza di bit
  5. ///a esso associato partenzo dal size del tipo di variabile passata
  6. ///Prototipi di Funzione
  7. void stampa_bit()
  8. {
  9.     system("cls");
  10.     char num;       ///Poichè non abbiamo a disposizione i Template dovremmo realizzare 3 funzioni uguali ma indipendenti rispetto al tipo di ogni singola variabie,
  11.                     ///per questioni di praticità andiamo a modificare ogni volta il tipo di num per verificarne il corretto funzionamento
  12.                     ///Usa una volta 'char' una volta 'short' una volta 'int' e così via....
  13.                     ///Ricorda!!! Gli operatori bitwise funzionano SOLO su tipi numerici!!!
  14.     char i;
  15.     printf("Inserisci un numero: ");
  16.     scanf("%d",&num);   ///Anche se sembra ambiguo un CHAR è un tipo numerico!
  17.     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
  18.         (i%4 == 0) ? printf("%c ",(num&1<<i)?'1':'0'):printf("%c",(num&1<<i)?'1':'0');
  19.         ///L'esempio qui sopra utilizza la forma contratta dell'if e gli operatori bitwise
  20.         ///La scrittura sopra equivale a dire
  21.         ///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
  22.         ///Stampa il bit corrispettivo seguito da uno spazio
  23.         ///Altrimenti stampalo semplicemente
  24.         ///Passiamo ora ad analizzare la scrittura (num&1<<i)?'1':'0'
  25.         ///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
  26.         ///Se la relazione è vera (?) allora stampa '1' se è falsa (:) stampa '0'
  27.     putchar('\n');
  28.     system("pause");
  29. }
  30. void scambia_var()
  31. {
  32.     system("cls");
  33.     int a,b;
  34.     printf("Inserisci il primo numero: ");
  35.     scanf("%d",&a);
  36.     printf("Inserisci il secondo numero: ");
  37.     scanf("%d",&b);
  38.     a=a^b;
  39.     b=a^b;
  40.     a=a^b;
  41.     printf("Primo numero: %d, Secondo numero: %d",a,b);
  42.     putchar('\n');
  43.     system("pause");
  44. }
  45. int main()
  46. {
  47.     char scelta;
  48.     do
  49.     {
  50.         system("cls");
  51.         printf("*******RIEPILOGO BITWISE*******\n");
  52.         printf("Per eseguire 'Stampa_Bit'......Premi 1\n");
  53.         printf("Per eseguire 'Scambia_Var'.....Premi 2\n");
  54.         printf("Per Uscire.....................Premi 0\n");
  55.         fflush(stdin);
  56.         scanf("%d",&scelta);
  57.         switch(scelta)
  58.         {
  59.             case 1:stampa_bit();    break;
  60.             case 2:scambia_var();   break;
  61.             case 0:
  62.                 {
  63.                     printf("Arresto in corso.....");
  64.                     return 0;
  65.                 }
  66.             default:
  67.                 {
  68.                     printf("Scelta non valida!\n");
  69.                     system("pause");
  70.                 }
  71.         }
  72.     }while(scelta!=0);
  73.  
  74. }
Add Comment
Please, Sign In to add comment