Newsgroup: it.comp.lang.c
Titolo: Tipo int ( gamme valori )

Scusate la domanda alquanto stupida , ma sono un neofita del C.
Ho letto che le gamme per i valori minimi e massimi per una variabile
di tipo int sono : -32767 e 32767 ( 15+1 bit ).
Cio' significa che se in un programma avente una variabile di tipo int
ed il relativo valore inputato da tastiera e' per esempio 33121 , mi
dovrebbe dare un errore di overflow mediante NaN ( not a number )..e'
corretto?
Cio non accade in quanto non mi appare nessun errore del genere anche
se digito valori molto piu' grandi aventi in sostanza anche 9 cifre (
879941058).
Viene forse tutto convertito in long automaticamente ed a mia insaputa
?
Vi ringrazio per la risposta. Buon 2007
Giovanni

 Giovanni
Buon anno anche a te!
Giacomo

Giacomo Degli Esposti ha scritto:

Grazie per risposta .Ti riferisci a INT_MAX ? Essa e' definita nella
libreria standard limits.h
Come praticamente faccio a verificarlo?
Scusa se faccio domande terra a terra..
Grazie

 Come praticamente faccio a verificarlo?
Stampando INT_MAX.

 compilatore, architettura della macchina, eccetera.
(la tua affermazione e' pero' incompleta)
Qualche certezza esiste. Credo sia importante ricordare che l'ANSI-C 
aveva gia' definito la grandezza *minima* dei tipi interi. Valori 
sostanzialmente identici a quelli che possiamo trovare anche oggi sullo 
standard C99 [1] (a parte quelli per i nuovi tipi long long int).
In pratica, quando scriviamo del codice, dobbiamo essere consapevoli che 
l'uso di un signed int "non ci garantisce" valori assoluti superiori a 
32767; mentre puo' essere confortante sapere che un signed long int 
"garantisce almeno" valori assoluti non inferiori a 
2147483647
 - e 
questo indipendentemente dal sistema o dal compilatore (standard) 
utilizzato.
Non credo che sia una cosa da poco, dal punto di vista della portabilita'.
Buon Anno!
===
Note
[1] Grandezze dei tipi interi. Ogni compilatore puo' definire le 
proprie, a patto che non siano inferiori (come valore assoluto) ai 
valori sotto riportati:
   ISO/IEC 9899:1999 (E)
   5.2.4.2.1 Sizes of integer types <limits.h>
   1  The values given below shall be replaced by constant
      expressions suitable for use in #if preprocessing
      directives. Moreover, except for CHAR_BIT and MB_LEN_MAX,
      the following shall be replaced by expressions that have
      the same type as would an expression that is an object
      of the corresponding type converted according to the
      integer promotions. Their implementation-defined values
==>  shall be equal or greater in magnitude (absolute value)
      to those shown, with the same sign.
      -- number of bits for smallest object that is not a bit-field (byte)
      CHAR_BIT 8
      -- minimum value for an object of type signed char
      SCHAR_MIN -127 // -(2^7 - 1)
      -- maximum value for an object of type signed char
      SCHAR_MAX +127 // 2^7 - 1
      -- maximum value for an object of type unsigned char
      UCHAR_MAX 255 // 2^8 - 1
      -- minimum value for an object of type char
      CHAR_MIN see below
      -- maximum value for an object of type char
      CHAR_MAX see below
      -- maximum number of bytes in a multibyte character, for any 
supported locale
      MB_LEN_MAX 1
      -- minimum value for an object of type short int
      SHRT_MIN -32767 // -(2^15 - 1)
      -- maximum value for an object of type short int
      SHRT_MAX +32767 // 2^15 - 1
      -- maximum value for an object of type unsigned short int
      USHRT_MAX 65535 // 2^16 - 1
      -- minimum value for an object of type int
      INT_MIN -32767 // -(2^15 - 1)
      -- maximum value for an object of type int
      INT_MAX +32767 // 2^15 - 1
      -- maximum value for an object of type unsigned int
      UINT_MAX 65535 // 2^16 - 1
      -- minimum value for an object of type long int
      LONG_MIN -
2147483647
 // -(2^31 - 1)
      -- maximum value for an object of type long int
      LONG_MAX +2147483647 // 2^31 - 1
      -- maximum value for an object of type unsigned long int
      ULONG_MAX 4294967295 // 2^32 - 1
      -- minimum value for an object of type long long int
      LLONG_MIN -9223372036854775807 // -(2^63 - 1)
      -- maximum value for an object of type long long int
      LLONG_MAX +9223372036854775807 // 2^63 - 1
      -- maximum value for an object of type unsigned long long int
      ULLONG_MAX 18446744073709551615 // 2^64 - 1
   2  If the value of an object of type char is treated as a
      signed integer when used in an expression, the value of
      CHAR_MIN shall be the same as that of SCHAR_MIN and the
      value of CHAR_MAX shall be the same as that of SCHAR_MAX.
      Otherwise, the value of CHAR_MIN shall be 0 and the value
      of CHAR_MAX shall be the same as that of UCHAR_MAX. 15)
      The value UCHAR_MAX shall equal 2^CHAR_BIT - 1.
  15) See 6.2.5.
  .......
-- 
Cybertoldo
Per rispondermi via email, sostituisci moc.liamg con 
gmail.com

 almeno 32 bit per il tipo int e quindi non produce alcun tipo di errore. 
L'aritmetica su tipi interi non produce comunque nessun errore di
overflow.
Al limite un valore floating point puo' arrivare a INFINITY (ma non
NAN).
Luca
-- 
"Sei l'unica donna della mia vita".
(Adamo)