elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  tipos de enteros en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: tipos de enteros en C  (Leído 5,831 veces)
lucaslopez0000

Desconectado Desconectado

Mensajes: 95


Ver Perfil WWW
tipos de enteros en C
« en: 16 Diciembre 2012, 21:18 pm »

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


En línea

La manera mas simple de solucionar los problemas de windows , los virus , el spyware , la basura de microsoft en general

USA LINUX
twins

Desconectado Desconectado

Mensajes: 54


Ver Perfil
Re: tipos de enteros en C
« Respuesta #1 en: 16 Diciembre 2012, 21:36 pm »

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


En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: tipos de enteros en C
« Respuesta #2 en: 16 Diciembre 2012, 21:40 pm »

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
En línea

Regístrate en
lucaslopez0000

Desconectado Desconectado

Mensajes: 95


Ver Perfil WWW
Re: tipos de enteros en C
« Respuesta #3 en: 16 Diciembre 2012, 22:07 pm »

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  :)
En línea

La manera mas simple de solucionar los problemas de windows , los virus , el spyware , la basura de microsoft en general

USA LINUX
avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: tipos de enteros en C
« Respuesta #4 en: 16 Diciembre 2012, 22:14 pm »

¡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?
« Última modificación: 16 Diciembre 2012, 22:17 pm por avesudra » En línea

Regístrate en
0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: tipos de enteros en C
« Respuesta #5 en: 17 Diciembre 2012, 16:05 pm »

Quiza con bitfields puedas hacer algo.

Saludos.
En línea

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

Desconectado Desconectado

Mensajes: 95


Ver Perfil WWW
Re: tipos de enteros en C
« Respuesta #6 en: 17 Diciembre 2012, 18:42 pm »

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 :)
En línea

La manera mas simple de solucionar los problemas de windows , los virus , el spyware , la basura de microsoft en general

USA LINUX
naderST


Desconectado Desconectado

Mensajes: 625



Ver Perfil WWW
Re: tipos de enteros en C
« Respuesta #7 en: 17 Diciembre 2012, 18:51 pm »

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.
En línea

0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: tipos de enteros en C
« Respuesta #8 en: 17 Diciembre 2012, 21:31 pm »

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/
En línea

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


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: tipos de enteros en C
« Respuesta #9 en: 18 Diciembre 2012, 02:44 am »

Espero 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.

En 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
En línea

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
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Concatenar enteros.
Programación C/C++
Nanoc 3 9,554 Último mensaje 12 Junio 2010, 01:24 am
por Littlehorse
Ingresar 10 enteros « 1 2 »
Programación C/C++
mili03 10 9,349 Último mensaje 4 Julio 2010, 02:54 am
por d4n0n3
Desbordamiento de enteros en PHP 5.x
Noticias
wolfbcn 0 1,932 Último mensaje 29 Abril 2011, 13:47 pm
por wolfbcn
Suma de enteros en C
Programación C/C++
osofer 9 3,949 Último mensaje 15 Agosto 2011, 22:54 pm
por osofer
copiar vectores de enteros
Programación C/C++
m@o_614 1 1,789 Último mensaje 22 Noviembre 2013, 01:57 am
por rir3760
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines