1 / 5

Tipi di dati semplici in C (1/3)

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

lenore
Download Presentation

Tipi di dati semplici in C (1/3)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 l’intero 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 sull’ordine 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 • L’aggiunta di modificatori non sempre cambia il range di valori ammissibili • L’allocazione 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) 38 38 308 308 4932 4932

  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 l’espressione e permette di applicare l’operazione appropriata per il tipo omogeneo ottenuto • In C esistono conversioni automatiche implicite oppure manuali esplicite • Regole di conversione implicita (promozione) • Se l’espressione rvalue è eterogenea, le variabili char o short (incluse le versioni signed e unsigned) sono convertite temporaneamente in int • Se l’espressione è 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 dell’espressione rvalue avrà tipo uguale a quello più in alto, secondo la gerarchia, tra quelli presenti nell’espressione • 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 l’assegnamento a int viene troncata, e alla fine n vale 1 • x = n/m  la divisione tra interi è sempre troncata e restituisce 2 però con l’assegnamento 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)

More Related