tipos de enteros en C

Iniciado por lucaslopez0000, 16 Diciembre 2012, 21:18 PM

0 Miembros y 1 Visitante están viendo este tema.

lucaslopez0000

Buenas a todos , queria realizar lo siguiente , que ahora explico.
Imaginemos que pongo int x; , esto reservaria 32 bits para guardar un numero entero.
¿ puedo decirle al compilador que quiero un entero de X bytes ?
algo así:
int x size tamañoenbytes;
¿ Es posible o estoy diciendo aberraciones ?
Muchas gracias
La manera mas simple de solucionar los problemas de windows , los virus , el spyware , la basura de microsoft en general

USA LINUX

twins

La memoria es asignada segun el complilador por ejemplo para int algunos reservan 2 bytes y otros reservan 4 bytes, lamentablemente no hay mucho que hacer a lo que tu deseas

avesudra

Si que  hay mucho que hacer twins , para lo que quieres puedes hacer uso de esta fantástica librería:

The GNU Multiple Precision Arithmetic Library
Regístrate en

lucaslopez0000

Muchas gracias , pero ya conocia GNU arbitrary precision ...
Lo que quiero no son las operaciones ( que se como hacerlas ) sino definir un tipo de dato estilo int pero de 128 bits , por ejemplo.
En cuanto a la primera respuesta acaba de pasar x mi cabeza la idea de buscar el codigo fuente del gcc y modificarlo
para que al compilar coja los int como de 128 bits  :)
La manera mas simple de solucionar los problemas de windows , los virus , el spyware , la basura de microsoft en general

USA LINUX

avesudra

#4
¡Pero es que no vas a poder trabajar con el! Eso de modificar el código de GCC es una locura más que nada porque tendrías que programar las operaciones para trabajar con 128 bits(y eso conlleva reinventar la rueda). Ya que te recuerdo que los procesadores trabajan con 8,16,32 y 64 bits nativamente. Si no te importa responder ¿porqué ese interés en usar un entero de 128 bits y no usar gmp?
Regístrate en

0xDani

Quiza con bitfields puedas hacer algo.

Saludos.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

lucaslopez0000

Espero que no me comais , pero no tengo pc personal y voy al del ciber , que como todos , tienen el podrido winbugs . Solo 1 dia a la semana puedo tener acceso a un pc con linux , y al del ciber no le hace mucha gracia que le toque la BIOS :(
Además , aunque winbugs sea horrible , me gustaria ver si existe un modo de decirle al pc que los mismos algoritmos que usa para operar con enteros de 32 / 64 bits los use con cualquier longitud.
Tambien probé a usar struct para crear un entero de 128 bits , pero el compilador no me permite crear int de tanto tamaño ni siquiera con struct.
No se si será cosa del podrido dev c++ ( con lo bonito que era en linux con gedit y gcc  :-( ) o del propio lenguaje C , aunque por motivos de portabilidad ya se podrian haber creado un tipo de dato que se adapte al valor que le metas ¿ eso existe ?
Imaginate que hago esto:
 
      tipo_flexible blabla;
      blabla = 9;
      // como 9 en binario es 1001 , harian falta 4 bits para representarlo ...
      blabla = 130;
      // como 130 en binario es 10000010 , harian falta 8 bits , y la variable
     // automaticamente coGJeria ese tamaño en bytes ...

En definitiva : ¿ Existe algun tipo de variable que cambie su tamaño a medida que se requiera mas espacio ?

Me da la impresion de que vuelvo a decir aberraciones de índole variada  :P

Gracias por responder :)
La manera mas simple de solucionar los problemas de windows , los virus , el spyware , la basura de microsoft en general

USA LINUX

naderST

Lo más "sencillo" que puedes hacer es crear tu tipo abstracto de datos que te permita tener un dato de 128 bits y crear el conjunto de operaciones que te permitan operar sobre este tipo de dato.

0xDani

Mira este articulo sobre bitfields, tienen sus ventajas e inconvenientes, piensalo y quizas consigas una aproximacion a tu tipo flexible.

http://www.linuxforu.com/2012/01/joy-of-programming-understanding-bit-fields-c/
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

rir3760

Cita de: lucaslopez0000 en 17 Diciembre 2012, 18:42 PMEspero que no me comais , pero no tengo pc personal y voy al del ciber , que como todos , tienen el podrido winbugs. [...] No se si será cosa del podrido dev c++ ( con lo bonito que era en linux con gedit y gcc  :-( )
No quiero sonar grosero y tampoco es mi intención iniciar una flamewar pero me parece que te estas dejando llevar por el prejuicio. Si consideramos que los compiladores utilizados con Dev-C++ son versiones de gcc para MS Windows (MinGW y CygMing) no veo como pueda existir tal diferencia a menos (y de nuevo) que sea debido a una cuestión de percepción.

Cita de: lucaslopez0000 en 17 Diciembre 2012, 18:42 PMEn definitiva : ¿ Existe algun tipo de variable que cambie su tamaño a medida que se requiera mas espacio ?
No. En C el tamaño de los tipos esta dado en bytes. Siguiendo tu ejemplo los valores 9 y 130 son de tipo int y utilizan un espacio igual a "sizeof(int)", cualquier operación entre ellos (aritmética, a nivel de bits, etc.) siempre se realiza como mínimo con ese tipo.

Como ya te comentaron si requieres de soporte para números realmente grandes fuera del rango del tipo "long" (C90) o "long long" (C99) la solución es una biblioteca de terceros.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language