shodan
14-04-2004, 17:33
Ciao a tutti ragazzi,
vorrei porvi una domanda.
In C, su una normale macchina IA32 (dal 386 in su quindi) i valori associabili a una variabile di tipo int dovrebbero andare da 2147483647 a -2147483648; le variabili di tipo unsigned int invece dovrebbero avere un range da 0 a 4294967295.
Quindi un valore tipo 2147483648 (numero positivo quindi) NON dovrebbe essere gestibile da una variabile di tipo int, mentre una di tipo unsigned int dovrebbe essere perfettamente adatta allo scopo.
Ho scritto un piccolo programmino che si prefigge di testare questo. Ecco il codice:
#include <stdio.h>
#include <limits.h>
int main ()
{
unsigned int a, b;
a = 2147483647;
b = 2147483648;
printf ("%s%d", "Valore a: ", a);
printf ("%s%d", "Valore b: ", b);
return 0;
}
In linea teorica dovrebbe essere tutto OK, però con il comando "gcc x.c -Wall" ottengo il seguente output:
"x.c: In function `main':
x.c:8: warning: this decimal constant is unsigned only in ISO C90"
Ho provato anche a cambiare il codice del programma in questo modo:
#include <stdio.h>
#include <limits.h>
int main ()
{
unsigned int a, b;
a = 2147483647;
b = 2147483647+1;
printf ("%s%d", "Valore a: ", a);
printf ("%s%d", "Valore b: ", b);
return 0;
}
Questa volta, compilando il codice ottengo:
"x.c: In function `main':
x.c:8: warning: integer overflow in expression"
Ho cercato un po' su Google ma in effetti non ho le idee molto chiare sulla causa di questo... sembrerebbe che il mio compilatore (GCC 3.3.3) si rifiuti di riconoscere unsigned le variabili int 'a' e 'b'.
Qualcuno mi può chiarire le idee?
Grazie mille! :)
vorrei porvi una domanda.
In C, su una normale macchina IA32 (dal 386 in su quindi) i valori associabili a una variabile di tipo int dovrebbero andare da 2147483647 a -2147483648; le variabili di tipo unsigned int invece dovrebbero avere un range da 0 a 4294967295.
Quindi un valore tipo 2147483648 (numero positivo quindi) NON dovrebbe essere gestibile da una variabile di tipo int, mentre una di tipo unsigned int dovrebbe essere perfettamente adatta allo scopo.
Ho scritto un piccolo programmino che si prefigge di testare questo. Ecco il codice:
#include <stdio.h>
#include <limits.h>
int main ()
{
unsigned int a, b;
a = 2147483647;
b = 2147483648;
printf ("%s%d", "Valore a: ", a);
printf ("%s%d", "Valore b: ", b);
return 0;
}
In linea teorica dovrebbe essere tutto OK, però con il comando "gcc x.c -Wall" ottengo il seguente output:
"x.c: In function `main':
x.c:8: warning: this decimal constant is unsigned only in ISO C90"
Ho provato anche a cambiare il codice del programma in questo modo:
#include <stdio.h>
#include <limits.h>
int main ()
{
unsigned int a, b;
a = 2147483647;
b = 2147483647+1;
printf ("%s%d", "Valore a: ", a);
printf ("%s%d", "Valore b: ", b);
return 0;
}
Questa volta, compilando il codice ottengo:
"x.c: In function `main':
x.c:8: warning: integer overflow in expression"
Ho cercato un po' su Google ma in effetti non ho le idee molto chiare sulla causa di questo... sembrerebbe che il mio compilatore (GCC 3.3.3) si rifiuti di riconoscere unsigned le variabili int 'a' e 'b'.
Qualcuno mi può chiarire le idee?
Grazie mille! :)