Post on 21-Jul-2020
Variabili e memoria
Laboratorio di Calcolo
Variabili e costanti
a = 2;
b = 3.5;
c = 2.;
0xffffa000
0xffffa001
0xffffa002 00000010
0xffffa003
0xffffa004
0xffffa005
0xffffa006
0xffffa007
06/10/2008 2Laboratorio di Calcolo - Organtini
Variabili e costanti
a = 2;
b = 3.5;
c = 2.;
Nota: per brevità
le variabili intere
sono rappresentate
usando solo 8 bit
0xffffa000
0xffffa001
0xffffa002 00000010
0xffffa003
0xffffa004
0xffffa005
0xffffa006
0xffffa007
06/10/2008 3Laboratorio di Calcolo - Organtini
Variabili e costanti
a = 2;
b = 3.5;
c = 2.;
0xffffa000
0xffffa001
0xffffa002 00000010
0xffffa003 01000000
0xffffa004 01100000
0xffffa005 00000000
0xffffa006 00000000
0xffffa007
3.5 = (1 + 0.75)*21
06/10/2008 4Laboratorio di Calcolo - Organtini
Variabili e costanti
a = 2;
b = 3.5;
c = 2.;
0xffffa002 00000010
0xffffa003 01000000
0xffffa004 01100000
0xffffa005 00000000
0xffffa006 00000000
0xffffa007 01000000
0xffffa008 00000000
0xffffa009 00000000
0xffffa00a 000000002. = (1 + 0)*21
06/10/2008 5Laboratorio di Calcolo - Organtini
Variabili e costanti
a = 2;
b = 3.5;
c = 2.;
d = „f‟;
0xffffa003 01000000
0xffffa004 01100000
0xffffa005 00000000
0xffffa006 00000000
0xffffa007 01000000
0xffffa008 00000000
0xffffa009 00000000
0xffffa00a 00000000
0xffffa00b 01100110f ↔ 102 (6616)
06/10/2008 6Laboratorio di Calcolo - Organtini
Operatori matematici
c = a + b;
0xffffa002 00000010
0xffffa003 01000000
0xffffa004 01100000
0xffffa005 00000000
0xffffa006 00000000
0xffffa007 01000000
0xffffa008 00000000
0xffffa009 00000000
0xffffa00a 00000000
06/10/2008 7Laboratorio di Calcolo - Organtini
Operatori matematici
c = a + b;
Nota: nel registro della
CPU il numero 2 viene “promosso” a float
0xffffa002 00000010
0xffffa003 01000000
0xffffa004 01100000
0xffffa005 00000000
0xffffa006 00000000
0xffffa007 01000000
0xffffa008 00000000
0xffffa009 00000000
0xffffa00a 00000000
06/10/2008 8Laboratorio di Calcolo - Organtini
Operatori matematici
c = a + b;
0xffffa002 00000010
0xffffa003 01000000
0xffffa004 01100000
0xffffa005 00000000
0xffffa006 00000000
0xffffa007 01000000
0xffffa008 00000000
0xffffa009 00000000
0xffffa00a 00000000
06/10/2008 9Laboratorio di Calcolo - Organtini
Operatori matematici
c = a + b;
0xffffa002 00000010
0xffffa003 01000000
0xffffa004 01100000
0xffffa005 00000000
0xffffa006 00000000
0xffffa007 01000000
0xffffa008 10110000
0xffffa009 00000000
0xffffa00a 00000000
5.5 = (1 + 0.375)*22
06/10/2008 10Laboratorio di Calcolo - Organtini
Operatori speciali
a = 2;
b = ++a;
0xffffa002 00000010
0xffffa003
06/10/2008 11Laboratorio di Calcolo - Organtini
Operatori speciali
a = 2;
b = ++a;
0xffffa002 00000011
0xffffa003 00000011
06/10/2008 12Laboratorio di Calcolo - Organtini
Operatori speciali
a = 2;
b = ++a;
a = 2;
b = a++;
0xffffa002 00000010
0xffffa003
06/10/2008 13Laboratorio di Calcolo - Organtini
Operatori speciali
a = 2;
b = ++a;
a = 2;
b = a++;
0xffffa002 00000011
0xffffa003 00000010
06/10/2008 14Laboratorio di Calcolo - Organtini
Programmi e variabili
main() {
float tc, tf = 90., conv;
float offset = 32.;
conv = 5./9.;
tc = (tf – offset) * conv;
}
? 90. ?
tc tf conv06/10/2008 15Laboratorio di Calcolo - Organtini
Programmi e variabili
main() {
float tc, tf = 90., conv;
float offset = 32.;
conv = 5./9.;
tc = (tf – offset) * conv;
}
? 90. ? 32.
tc tf conv offset06/10/2008 16Laboratorio di Calcolo - Organtini
Programmi e variabili
main() {
float tc, tf = 90., conv;
float offset = 32.;
conv = 5./9.;
tc = (tf – offset) * conv;
}
? 90. 0.555 32.
tc tf conv offset06/10/2008 17Laboratorio di Calcolo - Organtini
Programmi e variabili
main() {
float tc, tf = 90., conv;
float offset = 32.;
conv = 5./9.;
tc = (tf – offset) * conv;
}
32.22 90. 0.555 32.
tc tf conv offset06/10/2008 18Laboratorio di Calcolo - Organtini
Test
• Cosa accade se eseguo il programma?
• Nulla, perché non ci sono istruzioni di output!
06/10/2008 19Laboratorio di Calcolo - Organtini
Input/Output
scanf(“%f”, &tf);
06/10/2008 20Laboratorio di Calcolo - Organtini
Input/Output
scanf(“%f”, &tf);
90
06/10/2008 21Laboratorio di Calcolo - Organtini
Input/Output
scanf(“%lf”, &tf);
90 = (1+0.40625)26
010000101011010000000000...
06/10/2008 22Laboratorio di Calcolo - Organtini
Input/Output
scanf(“%lf”, &tf);
90.
90 = (1+0.40625)26
010000101011010000000000...
06/10/2008 23Laboratorio di Calcolo - Organtini
Input/Output
printf(“%f F = %f C\n”, tf, tc);
06/10/2008 24Laboratorio di Calcolo - Organtini
Input/Output
printf(“%f F = %f C\n”, tf, tc);
06/10/2008 25Laboratorio di Calcolo - Organtini
Input/Output
printf(“%f F = %f C\n”, tf, tc);
90.000000 F = ...
06/10/2008 26Laboratorio di Calcolo - Organtini
Input/Output
printf(“%f F = %f C\n”, tf, tc);
90.000000 F = 32.222222 C...
06/10/2008 27Laboratorio di Calcolo - Organtini
Input/Output
printf(“%f F = %f C\n”, tf, tc);
90.000000 F = 32.222222 C
>
06/10/2008 28Laboratorio di Calcolo - Organtini
Importanza della rappresentazione
(tc – offset) * 5./ 9.;
(tc – offset) * 5./ 9;
(tc – offset) * 5 / 9;
5 / 9 * (tf – offset);
06/10/2008 29Laboratorio di Calcolo - Organtini
Direttive
#include
Consente di includere il contenuto di un altro
file
#define
Definisce un simbolo (Attenzione!!!)
#ifdef, #ifndef, #else
Compilazione condizionale
06/10/2008 30Laboratorio di Calcolo - Organtini