Duda programación C/C++

Bien estoy realizando un programa en C++ y me encuentro con la siguiente dificultad: necesito tener un tipo de datos que tenga exactamente 64 bits, o en su defecto simularlo, pero claro, como en cada plataforma cada tipo de dato puede variar en longitud, pues no se cómo hacer para conseguir las longitudes de los tipos de datos. No se si me he explicado muy bien. :D

Salu2!
Dagaren escribió:Bien estoy realizando un programa en C++ y me encuentro con la siguiente dificultad: necesito tener un tipo de datos que tenga exactamente 64 bits, o en su defecto simularlo, pero claro, como en cada plataforma cada tipo de dato puede variar en longitud, pues no se cómo hacer para conseguir las longitudes de los tipos de datos. No se si me he explicado muy bien. :D

Salu2!


En principio, el operador sizeof te da el tamaño en bytes de una variable o de un tipo de dato, una vez con el tamaño del tipo de dato, sólo tienes que hacer la reserva dinámica, más o menos yo lo haría así:
int *aux=NULL;
int tamanio = 8/sizeof(int); // 8 bytes = 64 bits
   
if ((aux = (int *) malloc (tamanio * sizeof(int))) == NULL)
return -1; // Por ejemplo ;)


Luego sólo tienes que tratarlo byte a byte.

Espero haberte ayudado.

Un saludo.
long long dato64bits;

te vale con eso?
f5inet el problema es que dependiendo de la máquina el tipo de dato podrá tener una longitud distinta.

Y respecto a el uso de malloc el problema es que yo sobre esos tipos de datos necesito realizar operaciones a nivel de bits y me interesaría hacer el mínimo posible de operaciones, es decir que cuando pueda tener directamente los 64 bits en un tipo de dato que se use, y los que no tengan y, por ejemplo, tengan 32 bits, pues que se simule con dos palabras de 32. Es un poco lioso pero weno, seguiré buscando.
Según:

http://www.opengroup.org/onlinepubs/009695399/basedefs/stdint.h.html

int64_t y uint64_t.

Aunque son dependientes de la plataforma y no necesarios.

# if __WORDSIZE == 64
typedef long int                int64_t;
# else
__extension__
typedef long long int           int64_t;
# endif


(Ojo que en máquinas de 32 bit, no es estándar)

Saludos.Ferdy
Muchas gracias Ferdy ;), investigaré por ahí.

Pensando en ello me asalta la siguiene duda. Se supone que las decisiones acerca del tamaño de los tipos de datos se realizan en tiempo de compilación. Entonces por ejemplo un binario para una máquina de 32 bits de palabra si que funcionaría en una de 64 bits, pero ¿y al contrario? un binario compilado en una máquina con palabras de 64 bits seguiría funcionando en una máquina con procesador de 32 bits?
Entonces por ejemplo un binario para una máquina de 32 bits de palabra si que funcionaría en una de 64 bits


No

¿y al contrario? un binario compilado en una máquina con palabras de 64 bits seguiría funcionando en una máquina con procesador de 32 bits?


Tampoco
Hombre así de entrada se me ocurre que compruebes mediante sizeof los bits que ocupan los datos en cada maquina....

Y al final del todo si no hay ninguno que sea de 64 bits... pos crees tu ese tipo de dato... XD

[bye]
Hombre así de entrada se me ocurre que compruebes mediante sizeof los bits que ocupan los datos en cada maquina....

Y al final del todo si no hay ninguno que sea de 64 bits... pos crees tu ese tipo de dato...


Mala idea... es mejor asegurarse de usar gcc y glibc y punto.

Saludos.Ferdy
8 respuestas