Test Foro de elhacker.net SMF 2.1

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

#include <limits.h>

int intmin = INT_MIN;
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...

#include <float.h>

float floatmin = FLT_MIN; 
float floatmax = FLT_MAX;


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.


#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <float.h>


int main(int argc, char** argv) {

   printf("CHAR_BIT    :   %d\n", CHAR_BIT);
   printf("CHAR_MAX    :   %d\n", CHAR_MAX);
   printf("CHAR_MIN    :   %d\n", CHAR_MIN);
   printf("INT_MAX     :   %d\n", INT_MAX);
   printf("INT_MIN     :   %d\n", INT_MIN);
   printf("LONG_MAX    :   %ld\n", (long) LONG_MAX);
   printf("LONG_MIN    :   %ld\n", (long) LONG_MIN);
   printf("SCHAR_MAX   :   %d\n", SCHAR_MAX);
   printf("SCHAR_MIN   :   %d\n", SCHAR_MIN);
   printf("SHRT_MAX    :   %d\n", SHRT_MAX);
   printf("SHRT_MIN    :   %d\n", SHRT_MIN);
   printf("UCHAR_MAX   :   %d\n", UCHAR_MAX);
   printf("UINT_MAX    :   %u\n", (unsigned int) UINT_MAX);
   printf("ULONG_MAX   :   %lu\n", (unsigned long) ULONG_MAX);
   printf("USHRT_MAX   :   %d\n", (unsigned short) USHRT_MAX);
   printf("FLT_MAX     :   %g\n", (float) FLT_MAX);
   printf("FLT_MIN     :   %g\n", (float) FLT_MIN);
   printf("-FLT_MAX    :   %g\n", (float) -FLT_MAX);
   printf("-FLT_MIN    :   %g\n", (float) -FLT_MIN);
   printf("DBL_MAX     :   %g\n", (double) DBL_MAX);
   printf("DBL_MIN     :   %g\n", (double) DBL_MIN);
   printf("-DBL_MAX     :  %g\n", (double) -DBL_MAX);

   printf("Storage size for int : %d \n", sizeof(int));
   printf("Storage size for unsigned int : %d \n", sizeof(unsigned int));    
   printf("Storage size for unsigned long : %d \n", sizeof(unsigned long));
   printf("Storage size for long long : %d \n", sizeof(long long ));
   printf("Storage size for unsigned long long : %d \n", sizeof(unsigned long long));        
   return (EXIT_SUCCESS);
}


Esto cambia según la plataforma de desarrollo. En linux-x86-64, a mí me sale esto, pero entros puede salir otra cosa.
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