La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Tipi di dati semplici in C (1/3) Il C ha quattro tipi di dato semplice principali: –Caratteri, char –Numeri interi, int –Numeri reali in virgola mobile,

Presentazioni simili


Presentazione sul tema: "Tipi di dati semplici in C (1/3) Il C ha quattro tipi di dato semplice principali: –Caratteri, char –Numeri interi, int –Numeri reali in virgola mobile,"— Transcript della presentazione:

1 Tipi di dati semplici in C (1/3) Il C ha quattro tipi di dato semplice principali: –Caratteri, char –Numeri interi, int –Numeri reali in virgola mobile, float –Numeri reali in virgola mobile a doppia precisione, double Tutti gli altri si ottengono da quelli citati con i modificatori –Ogni modificatore anticipa la dichiarazione di tipo –Altera il significato del tipo base per adattarlo meglio ad altri contesti Modificatori: –signed, unsigned, long, short sono applicabili a int –signed, unsigned possono essere applicati a char –long può essere applicato anche a double In C esistono anche i tipi di dato strutturati: –Non sono altro che aggregazioni molteplici dati semplici

2 Tipi di dati semplici in C (2/3) Un carattere tra apici rappresenta una costante intera –Il carattere a rappresenta lintero 97, mentre A è pari a 65 –Il C non fa distinzione tra caratteri e interi: Esiste una corrispondenza biunivoca, data dalla tabella dei caratteri ASCII printf("%c",f') restituisce f, mentre printf("%d",f') restituisce 102 Anche i confronti tra caratteri (, ) si basano sullordine nella tabella ASCII –Usare char o unsigned char cambia solo la corrispondenza interi-caratteri Con unsigned tutti caratteri corrispondono esattamente ai 255 numeri ASCII Senza, i caratteri oltre il 127 ASCII corrispondono a (NumASCII - 256) La rappresentazione interna (n°bit) dipende dal calcolatore –Laggiunta di modificatori non sempre cambia il range di valori ammissibili –Lallocazione di memoria per ogni tipo rispetta sempre delle regole: Range(short int) Range(int) Range(long int) Range(signed int) = Range(int) = Range(unsigned int) Lo stesso vale per gli altri tipi –La tabella seguente indica quella che è la rappresentazione più comune

3 Tipi di dati semplici in C (2/3) TIPON. BITVALORI RAPPRESENTABILI char8Da -128 a +127 (o caratteri ASCII corrispondenti) unsigned char8Da 0 a 255 (o caratteri ASCII corrispondenti) signed char8Gli stessi del tipo base char int16Da a unsigned int16Da 0 a signed int16Gli stessi del tipo base int short int16Gli stessi del tipo base int unsigned short int16Gli stessi del tipo unsigned int signed short int16Gli stessi del tipo base int long int32Da a signed long int32Gli stessi del tipo long int unsigned long int32Da 0 a float32Circa da -3,4x10 a +3,4x10 double64Circa da -1,8x10 a +1,8x10 long double80Circa da -1,2x10 a +1,2x

4 Promozione e Cast (1/2) Nelle espressioni, il C ammette la combinazione di tipi –Se i tipi coinvolti sono eterogenei, è necessaria una conversione –La conversione rende omogenea lespressione e permette di applicare loperazione appropriata per il tipo omogeneo ottenuto –In C esistono conversioni automatiche implicite oppure manuali esplicite Regole di conversione implicita (promozione) –Se lespressione rvalue è eterogenea, le variabili char o short (incluse le versioni signed e unsigned) sono convertite temporaneamente in int –Se lespressione è ancora eterogenea, si converte temporaneamente ogni variabile di tipo inferiore nel tipo superiore, secondo questa gerarchia int < long int < unsigned int < unsigned long int < float < double < long double –Una volta resa omogenea, si applicano le operazioni sul tipo omogeneo –Quindi il risultato dellespressione rvalue avrà tipo uguale a quello più in alto, secondo la gerarchia, tra quelli presenti nellespressione –Se il tipo del risultato finale rvalue è inferiore al tipo di lvalue, il tipo finale di rvalue è promosso al tipo di lvalue per fare assegnamenti omogenei Viceversa, viene convertito nel tipo inferiore (perdita di precisione/informazione)

5 Promozione e Cast (2/2) Esempi: –dati int n=5, m=2; float x=4.0; x = n+x n è promosso a float (5.0) e alla fine x vale 9.0 n = n/m la divisione è tra interi e quindi troncata, alla fine n vale 2 n = n/x n è promosso a float (5.0) e la divisione tra float restituisce 1.25 però con lassegnamento a int viene troncata, e alla fine n vale 1 x = n/m la divisione tra interi è sempre troncata e restituisce 2 però con lassegnamento a float il risultato è promosso a float e x vale 2.0 Si possono fare anche conversioni esplicite (cast) –Si specifica il tipo in cui si desidera avere il risultato di una espressione mettendolo tra ( ) appena prima del rvalue –Tutte le variabili in rvalue sono convertite a forza nel tipo indicato e le operazioni sono in seguito svolte su tale tipo –Convertire in tipi inferiori comporta perdita di informazione (troncamento) –Esempi: x = (float) n/m n e m sono convertiti in float e la divisione tra float non è troncata ma restituisce un float, per cui alla fine x vale 2.5 n = (int) n/x x è convertito in int (4) e la divisione tra interi è troncata, per cui alla fine n vale 1 (perdita di precisione)


Scaricare ppt "Tipi di dati semplici in C (1/3) Il C ha quattro tipi di dato semplice principali: –Caratteri, char –Numeri interi, int –Numeri reali in virgola mobile,"

Presentazioni simili


Annunci Google