Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: JPS en 13 Enero 2018, 02:44 am



Título: Duda sobre C
Publicado por: JPS en 13 Enero 2018, 02:44 am
¿Hay algún código en C que te dé el rango de valores máximo (sin pasarse) en una máquina de sus tipos de dato?

Con esta web (http://decsai.ugr.es/~jfv/ed1/c/cdrom/cap2/cap24.htm) me hago una idea base, pero quiero algo más... comprobable mediante código.

¿Alguna idea de cómo hacer el algoritmo?


Título: Re: Duda sobre C
Publicado por: fary en 13 Enero 2018, 07:51 am
En sistemas de 32  bits sería un DWORD, en 64 un QWORD, puede cambiar el tamaño de la variable long,int,... según el compilador que uses y para que SO lo compiles por eso C trae la función sizeof, usalá.

saludos!


Título: Re: Duda sobre C
Publicado por: engel lex en 13 Enero 2018, 13:19 pm
En C tienes esta opción

Código
  1. #include <limits.h>
  2.  
  3. int intmin = INT_MIN;
  4. int intmax = INT_MAX;

La variables contendrán su máximo y mínimo valor, lee sobre limits.h para más información de los otros tipos


Con los float, esto lleva truco...

Código
  1. #include <float.h>
  2.  
  3. float floatmin = FLT_MIN;  
  4. float floatmax = FLT_MAX;
  5.  

Los float son un tipo complicado de número, así que el resultado puede ser un poco "abstracto"


Título: Re: Duda sobre C
Publicado por: JPS en 13 Enero 2018, 17:30 pm
¡Muchas gracias a los dos, me habéis servido de mucha ayuda! ¡Ahora a experimentar!


Título: Re: Duda sobre C (rangos de valores)
Publicado por: dijsktra en 8 Febrero 2018, 15:59 pm
Este programa se puede compilar y ejecutar en tu plataforma de desarrollo.
Por cierto, que no sé la fuente-url de dónde lo he sacado, pero no es propio.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <limits.h>
  4. #include <float.h>
  5.  
  6.  
  7. int main(int argc, char** argv) {
  8.  
  9.    printf("CHAR_BIT    :   %d\n", CHAR_BIT);
  10.    printf("CHAR_MAX    :   %d\n", CHAR_MAX);
  11.    printf("CHAR_MIN    :   %d\n", CHAR_MIN);
  12.    printf("INT_MAX     :   %d\n", INT_MAX);
  13.    printf("INT_MIN     :   %d\n", INT_MIN);
  14.    printf("LONG_MAX    :   %ld\n", (long) LONG_MAX);
  15.    printf("LONG_MIN    :   %ld\n", (long) LONG_MIN);
  16.    printf("SCHAR_MAX   :   %d\n", SCHAR_MAX);
  17.    printf("SCHAR_MIN   :   %d\n", SCHAR_MIN);
  18.    printf("SHRT_MAX    :   %d\n", SHRT_MAX);
  19.    printf("SHRT_MIN    :   %d\n", SHRT_MIN);
  20.    printf("UCHAR_MAX   :   %d\n", UCHAR_MAX);
  21.    printf("UINT_MAX    :   %u\n", (unsigned int) UINT_MAX);
  22.    printf("ULONG_MAX   :   %lu\n", (unsigned long) ULONG_MAX);
  23.    printf("USHRT_MAX   :   %d\n", (unsigned short) USHRT_MAX);
  24.    printf("FLT_MAX     :   %g\n", (float) FLT_MAX);
  25.    printf("FLT_MIN     :   %g\n", (float) FLT_MIN);
  26.    printf("-FLT_MAX    :   %g\n", (float) -FLT_MAX);
  27.    printf("-FLT_MIN    :   %g\n", (float) -FLT_MIN);
  28.    printf("DBL_MAX     :   %g\n", (double) DBL_MAX);
  29.    printf("DBL_MIN     :   %g\n", (double) DBL_MIN);
  30.    printf("-DBL_MAX     :  %g\n", (double) -DBL_MAX);
  31.  
  32.    printf("Storage size for int : %d \n", sizeof(int));
  33.    printf("Storage size for unsigned int : %d \n", sizeof(unsigned int));    
  34.    printf("Storage size for unsigned long : %d \n", sizeof(unsigned long));
  35.    printf("Storage size for long long : %d \n", sizeof(long long ));
  36.    printf("Storage size for unsigned long long : %d \n", sizeof(unsigned long long));        
  37.    return (EXIT_SUCCESS);
  38. }
  39.  

Esto cambia según la plataforma de desarrollo. En linux-x86-64, a mí me sale esto, pero entros puede salir otra cosa.
Código:
CHAR_BIT    :   8
CHAR_MAX    :   127
CHAR_MIN    :   -128
INT_MAX     :   2147483647
INT_MIN     :   -2147483648
LONG_MAX    :   9223372036854775807
LONG_MIN    :   -9223372036854775808
SCHAR_MAX   :   127
SCHAR_MIN   :   -128
SHRT_MAX    :   32767
SHRT_MIN    :   -32768
UCHAR_MAX   :   255
UINT_MAX    :   4294967295
ULONG_MAX   :   18446744073709551615
USHRT_MAX   :   65535
FLT_MAX     :   3.40282e+38
FLT_MIN     :   1.17549e-38
-FLT_MAX    :   -3.40282e+38
-FLT_MIN    :   -1.17549e-38
DBL_MAX     :   1.79769e+308
DBL_MIN     :   2.22507e-308
-DBL_MAX     :  -1.79769e+308
Storage size for int : 4
Storage size for unsigned int : 4
Storage size for unsigned long : 8
Storage size for long long : 8
Storage size for unsigned long long : 8