#include <stdio.h>

int main()
{
	/* ciclo infinito */
	unsigned int valore;
	unsigned int mask;
	int shift;
	int i;
	int scelta;

	while(1)
	{

		/* visualizza valore attuale in bin, hex, dec, oct */
		printf("Valore: ");
		for(i=15; i>=0; i--)
		{ 
			printf("%d", (valore >> i)&1);
		}
		printf("\nHex=%x Dec=%u Oct=%o\n",valore, valore, valore);

		/* offrire scelta operazione */
		printf("1=And 2=Or 3=Xor 4=Not 5=ShiftSx 6=ShiftDx\n");

		/* leggere scelta utente */
		scanf("%d", &scelta);

		/* se And, chiedere valore maschera + eseguire And con maschera */
		if(scelta==1)
		{
			printf("AND con quale maschera? ");
			scanf("%x",&mask);
			valore = valore & mask;
		}

		/* altrimenti se Or, input mask + exec Or */
		else if (scelta == 2)
		{
			printf("OR con quale maschera? ");
			scanf("%x",&mask);
			valore=valore | mask;
		}
		/* altrimenti se Xor, input mask + exec Xor */
		else if (scelta == 3)
		{
			printf("XOR con quale maschera? ");
			scanf("%x",&mask);
			valore=valore ^ mask;
		}
		/* altrimenti se Not, exec Not */
		else if (scelta == 4)
		{
			valore = ~ valore ;
		}
		/* altrimenti se Shift Sx, input delta + exec shift_sx */
		else if(scelta == 5)
		{
			printf("Shift a sinistra di..? ");
			scanf("%d", &shift);
			valore = valore << shift;
		}
		/* altrimenti se Shift Dx, input delta + exec shift_dx */
		else if(scelta == 6)
		{
			printf("Shift a destra di..? ");
			scanf("%d", &shift);
			valore = valore >> shift;
		}
		/* altrimenti: messaggio d'errore + fine programma */
		else
		{
			printf("Immissione errata.\n");
			return;
		}


	}
}