#include <iostream>
using namespace std;

int main(){
	
	cout<<"----------------------------------"<<endl;
	cout<<"ESPERIMENTO SUI NATURALI SU 16 BIT"<<endl;
	cout<<"----------------------------------"<<endl;
	
	cout<<"Il tipo unsigned short int occupa "<<sizeof(unsigned short int)<<" byte"<<endl;
	cout<<"ossia "<<8*sizeof(unsigned short int)<<" bit"<<endl;	
	
	unsigned short int max_nat = 0xFFFF; 
	// se unsigned short int e' rappresentato su 16 bit, 
	// il valore massimo espresso in base 16 e' FFFF (ossia 16 "uni" di seguito)
	// che corrisponde al decimale 65535
	
	cout<<endl<<"Il massimo numero naturale su 16 bit e' "<<max_nat<<endl;
	
	unsigned short int n = max_nat + 1;
	cout<<endl<<"Se provo a sommare uno al massimo naturale, ottengo "<<n<<endl; 
	
	cout<<endl<<"Ossia tutto avviene come se i naturali sono disposti lungo un cerchio."<<endl;
		
	n = max_nat + 3;
	cout<<endl<<"Infatti, sommando 3 al massimo naturale si deve ottere 2. Verifichiamolo: "<<n<<endl;
	        
        cout<<endl<<endl;			
	cout<<"----------------------------------"<<endl;
	cout<<"ESPERIMENTO SUGLI INTERI SU 16 BIT"<<endl;
	cout<<"----------------------------------"<<endl;
		
	short int max_int = 0x7FFF;  // che equivale a 32767 in base 10 (2^15-1)
	cout<<endl<<"Il massimo numero intero positivo su 16 bit e' "<<max_int<<endl;
	short int a = max_int + 1;
	cout<<endl<<"Se provo a sommare uno al massimo naturale, ";
	cout<<endl<<"ottengo il massimo numero negativo -2^15: "<<a<<endl;
	
	cout<<endl<<"Ossia tutto avviene come se anche gli interi sono disposti lungo un cerchio."<<endl;
	
    return 0;

}