Linguaggio C per MSX – lezione 1

da | Nov 3, 2023 | Linguaggio C | 0 commenti

Linguaggio C per MSX

Rubrica a cura di Nicola Brogelli (Parte 1)

Tipi primitivi

   Il linguaggio C mette a disposizione degli sviluppatori una serie di tipi di dato detti primitivi e una serie di operazioni che possono essere effettuate su di essi. Quindi ogni “oggetto” è individuato da due entità: un insieme di valori che questo può assumere e un insieme di operazioni definite su di esso. Nella tabella seguente troviamo l’elenco dei tipi primitivi che il linguaggio ci mette a disposizione.
char, Carattere, può avere il modificatore signed / unsigned
int, Numero intero, può avere il modificatore short / long / unsigned
float, Numero decimale
double, Numero decimale in doppia precisione, può avere il modificatore long

Tipo intero

   Il tipo primitivo int rappresenta nel linguaggio C i numeri interi. Se N è il numero di bit impiegati per rappresentare questo tipo di dato, i valori che potranno essere assunti saranno rappresentati dall’intervallo da -2N-1 a 2N-1-1.
Per conoscere esattamente come il nostro sistema implementa questo tipo di dato è sufficiente utilizzare l’operatore sizeof (tipo), il quale restituirà un numero che rappresenta l’occupazione in bytes del tipo specificato.
   Osservazione: Al tipo int si possono aggiungere i modificatori short, long che permettono di rappresentare gli interi su un numero minore o maggiore di bit. In linea generale possiamo affermare che un int non potrà mai essere minore di uno short int e di conseguenza un long int non potrà mai essere minore di un int. In particolari implementazioni potremmo rilevare che i tre tipi avranno la medesima occupazione di memoria. Esiste un altro modificatore chiamato unsigned questo permette di definire tipi intero senza segno. In questo caso se N è il numero di bit impiegati per rappresentare questo tipo di dato, i valori che potranno essere assunti saranno rappresentati dall’intervallo da 0 a 2N-1 (di default tutti i tipi sono definiti signed).
   Nota: In questo caso ho utilizzato la parola modificatore per intendere che il prefisso short, long e unsigned alterano la rappresentazione del nostro intero in memoria. Da notare che in molta documentazione non è utilizzata la parola modificatore ma si utilizza direttamente il termine tipo.
Nella breve introduzione ho specificato che ogni “oggetto” è individuato da due entità: un insieme di valori che l’oggetto può assumere (questo è già stato analizzato in precedenza) e un insieme di operazioni definite su di esso.
Quelle riportate nella tabella sono alcune tra le operazioni che Il linguaggio C mette a disposizione sugli interi:

       Operatori matematici                                                                                          Operatori logici

Simbolo              Descrizione                                                                           Simbolo              Descrizione
+                     Somma                                                                                               |                     OR a bit
–                      Sottrazione                                                                                         &                    AND a bit
*                     Moltiplicazione                                                                                  ^                     OR ESCLUSIVO a bit
/                      Divisione                                                                                             ~                    Complemento
%                    Resto della divisione                                                                       <<                    Shift a sinistra
>>                    Shift a destra

   Facciamo ora un esempio concreto di come si definisce una variabile di tipo intero assieme ai suoi modificatori e la sua contestuale inizializzazione. È bene ricordare che in C l’utilizzo di una variabile dichiarata ma non inizializzata porterà a un comportamento inatteso del programma, anche se nei moderni compilatori il problema viene intercettato e segnalato durante la fase di compilazione.
short s = 0;
int i = 0;
long l = 0;
unsigned int = 0;

Tipo reale

   Per i numeri reali esistono due tipi di dato float e double, che possono offrire una diversa precisione. La precisione offerta dipende dall’implementazione di ciascun tipo. Di conseguenza ci potrà essere la possibilità che il tipo float e double abbiano la stessa occupazione in memoria, ma non potrà succedere che il tipo float sia più preciso del tipo double.
Per conoscere l’effettiva implementazione dei tipi reali è sufficiente utilizzare l’operatore sizeof (tipo), il quale restituirà un numero che rappresenta l’occupazione in bytes del tipo specificato.
   Osservazione: Al tipo double è possibile aggiungere il modificatore long che ne permette un ulteriore estensione, modificandone cosi l’occupazione in memoria.
L’insieme delle operazioni definite sui tipi reali offerte dal linguaggio C sono riportate nella tabella seguente

   Operatori matematici                                                                               

Simbolo              Descrizione                                                                                 
+                     Somma
–                      Sottrazione
*                     Moltiplicazione
/                      Divisione
%                    Resto della divisione

Facciamo ora un esempio concreto di come si definisce una variabile di tipo reale assieme ai suoi modificatori e la sua contestuale inizializzazione. È bene ricordare che in C l’utilizzo di una variabile dichiarata ma non inizializzata porterà a un comportamento inatteso del programma, anche se nei moderni compilatori il problema viene intercettato e segnalato durante la fase di compilazione.
float f = 2.2;
double d = 2.0;
long double ld =1.5;

Tipo char

   Il tipo char ha come insieme di valori un set di caratteri opportunamente codificati. L’insieme dei valori associati al tipo char sono, le lettere dell’alfabeto, le cifre decimali, i simboli di punteggiatura e altri simboli vari. Ogni valore di tipo char viene rappresentato dal suo codice.
Per conoscere l’effettiva implementazione dei tipo char è sufficiente utilizzare l’operatore sizeof (tipo), il quale restituirà un numero che rappresenta l’occupazione in bytes del tipo specificato (normalmente un byte).
   Osservazione: Il tipo char può essere considerato a tutti gli effetti un tipo intero, i cui valori sono generalmente rappresentati su 8bit e al quale è possibile applicare i modificatori signed ed unsigned.
Potendo trattare quindi il tipo char a tutti gli effetti come un tipo int, potremmo quindi dedurre che L’insieme delle operazioni definite sui tipi int possono essere applicate anche al tipo char.

       Operatori matematici                                                                                       

Simbolo              Descrizione                                                                                 
+                     Somma
–                      Sottrazione
*                     Moltiplicazione
/                      Divisione
%                    Resto della divisione

   Facciamo ora un esempio concreto di come si definisce una variabile di tipo char assieme ai suoi modificatori e la sua contestuale inizializzazione.
char a = ‘A’;
char c = 65;

Costanti

   Per specificare che un “oggetto” è costante dobbiamo anteporre alla dichiarazione del tipo la parola chiave const . In questo caso è obbligatorio effettuare l’inizializzazione contestualmente alla dichiarazione. Il loro valore non potrà essere cambiato all’interno del programma. Di questo controllo sarà effettuato a tempo di compilazione.
const int a = 100;
const double pi = 3.14159;

Se il contenuto ti ha soddisfatto qui trovi la seconda dispensa.

   Per chi fosse interessato l’Associazione MSX Italia ha creato un gruppo di lavoro di Ricerca e sviluppo sulla programmazione C per MSX. Per maggiori info: associazioneMSXitalia@gmail.com

0 commenti

Invia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Linguaggio C per MSX – lezione 6

Linguaggio C per MSX – lezione 6

Linguaggio C per MSX Rubrica a cura di Nicola Brogelli (Parte 6) Array e Puntatori Array Multidimensionali             Fino ad ora abbiamo considerato array monodimensionali, i quali richiedevano un solo indice per l’individuazione di un elemento. Il C permette di...

Linguaggio C per MSX – lezione 6

Linguaggio C per MSX – lezione 5

Linguaggio C per MSX Rubrica a cura di Nicola Brogelli (Parte 5) Array e Puntatori Array Gli array sono sequenze di variabili dello stesso tipo che vengono memorizzare consecutivamente nella memoria ed alle quali è possibile accedere usando uno stesso nome...

Linguaggio C per MSX – lezione 3

Linguaggio C per MSX – lezione 3

Linguaggio C per MSX Rubrica a cura di Nicola Brogelli (Parte 3) Enumerazioni Gli enum o enumerazioni sono particolari tipi di dato che contengono un elenco di costanti, ciascuna delle quali è associata ad un valore intero. Nello specifico i valori costanti contenuti...

MSXgl una libreria di giochi scritta in C

MSXgl una libreria di giochi scritta in C

MSXgl è una libreria di giochi scritta in C e destinata ai computer MSX. L'obiettivo di questa libreria è quello di offrire ai programmatori C l'intero set di funzionalità per creare un gioco ad alte prestazioni. Anche se un programma C non potrà mai essere efficiente...

it_ITIT_IT