Home / Indice sezione
 www.icosaedro.it 

M2 Report

<= Espressioni logicheEspressioni reali =>
Frontespizio
Introduzione
Caratteristiche
Un semplice esempio
Moduli
Sezione IMPORT
Sezione CONST
Sezione TYPE
Tipo FORWARD
Sezione VAR
Sezione FUNCTION
Sezione BEGIN
Stringhe letterali
Sottostringhe
Commenti
Costanti predefinite
Variabili predefinite
Funzioni predefinite
Istruzione di assegnamento
Istruzione per la chiamata di funzione
Ordine di valutazione degli argomenti attuali
Istruzione IF
Istruzione SWITCH
Istruzione FOR
Istruzione WHILE
Istruzione REPEAT
Istruzione LOOP
Istruzione TRY
Istruzione RAISE ERROR
Istruzione RETURN
Espressioni logiche
Espressioni intere
Espressioni reali
Espressioni stringa
Espressioni tra tipi strutturati
Regole di scope
M2 per programmatori C
M2 per programmatori Java
Rappresentazione dei dati in memoria
Keywords
Messaggi di errore a runtime
Sintassi
 

Espressioni intere

Le espressioni di tipo INTEGER possono coinvolgere le costanti letterali di tipo INTEGER, le costanti di tipo INTEGER, le variabili di tipo INTEGER e le funzioni che ritornano INTEGER.

Le costanti letterali di tipo INTEGER si possono esprimere in base decimale nel modo consueto e in base esadecimale facendo precedere le cifre esadecimali dai caratteri "0x" (zero, x minuscola). Esempi:

1234  0xffa0  -0xAFF

I numeri interi utilizzano la lunghezza della parola del processore, tipicamente 32 bit, e sono rappresentati in complemento a due, perciò il loro range va da -(2^31) a (2^31-1). Il linguaggio non esegue controlli sui valori generati durante l'esecuzione del programma, sicchè il controllo dell'overflow è demandato alla logica del programma.

Per i numeri INTEGER sono previsti tre insiemi di operatori:

Sono disponibili gli operatori aritmetici e gli operatori logici a bit:

Operatori monadici:
- i Cambio di segno.
~ i Inversione di bit (complemento a uno).
Operatori moltiplicativi:
i * j
i DIV j
i MOD j
Prodotto, quoziente e resto.
i & j AND logico bit a bit.
i << j Scorrimento logico a sinistra di j bit. Il bit più a sinistra di i viene perduto. Il bit che entra a destra vale 0. j deve essere positivo.
i >> j Scorrimento logico a destra di j bit. Il bit più a destra di i viene perduto. Il bit che entra a sinistra vale zero. j deve essere positivo.
Operatori additivi:
i + j
i - j
Somma e sottrazione.
i | j OR logico bit a bit.
i ^ j XOR logico bit a bit.

Gli operatori di scorrimento logico agiscono sull'intera parola in memoria, senza dare particolare significato al bit di segno. Così ad esempio, la divisione per 2 equivale a uno scorrimento logico a destra di un bit solo se il numero è positivo:

4 >> 1 = 2 = 4 DIV 2
-4 >> 1 = 14

Gli operatori moltiplicativi hanno priorità sugli operatori additivi. L'operatore di complemento a uno ha la priorità massima. L'operatore di inversione di segno ha la stessa priorità degli operatori di somma e sottrazione binari. Gli operatori con uguale priorità associano da sinistra verso destra. Così l'espressione

-a * b & ~ c + d DIV e ^ f >> 2

viene interpretata come:

( -((a * b) & (~c)) + (d DIV e)) ^ (f >> 2)

perché vengono applicati prima l'operatore di complemento a uno, poi gli operatori moltiplicativi (* & DIV >>) e poi gli operatori additivi e di cambio di segno.

Le parentesi tonde si possono usare per cambiare l'ordine di applicazione degli operatori e ogni qualvolta lo si ritenga opportuno per migliorare la chiarezza delle espressioni.

MotivazioneLa suddivisione tra operatori moltiplicativi e operatori additivi è piuttosto arbitraria, ma è facile da ricordare e dovrebbe aiutare il programmatore a mettere correttamente le parentesi e ad interpretare le espressioni senza ambiguità.
 
<= Espressioni logicheEspressioni reali =>

Umberto Salsi

Contatto
Mappa
Home / Indice sezione