Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   unsigned __int64 vs int64u (https://www.clubdelphi.com/foros/showthread.php?t=88148)

aguml 18-04-2015 12:32:14

unsigned __int64 vs int64u
 
Pues eso, quisiera saber cual es más estándar de los dos ya que he buscado por Internet y no me ha quedado nada claro. ¿Y cuál es mejor usar en builder? Otra duda es saber que tendría que poner en sprintf para cada uno de ellos ya que he leído que %llu puede valer para ambos pero que unsigned long long no tiene por qué ser 64 bits en todas las máquinas.

Ñuño Martínez 18-04-2015 21:49:55

La verdad es que no sé qué poner, pero siguiendo la lógica de C en esto de definición de datos (y si no se me ha olvidado ni ha cambiado mucho con el C99 y posteriores), yo usaría "unsigned long long int", que creo haberlo visto en algún código hace años.

De todas formas, en C (y de nuevo si no ha cambiado mucho con el C99 y posteriores), los nombres precedidos de uno o dos caracteres de subrayado suelen indicar "para uso interno solamente", así que yo optaría por "int64u".

Sin embargo, dependiendo del compilador quizá bastara un "unsigned long int" (por ejemplo, en el GCC en modo 64bit), pero no sé si será así en Builder.

aguml 18-04-2015 23:24:13

La idea es tener al menos 64 bits, si es más mejor pero creo que con 64 va bien.
Según lo que me dices,si unsigned long int en modo de 64 bits (entiendo por eso a un procesador de 64 con un S.O. de 64) tiene 64 bits, en ese mismo modo un unsigned long long int ¿seria 128 bits? Si fuese así y no corro el riesgo de que unsigned long long int pueda valer menos de 64 bits me valdría tanto o más que los que indico yo.
También tengo entendido que unsigned long long int no es reconocido por los visual studio y que estos usan LONG LONG o algo así. No se que tan cierto es.

ecfisa 19-04-2015 17:37:40

Hola aguml.

Aquí los tipos estandar long long int (C++ 11). El mismo tipo lo podemos ver con otras denominaciones vg.: Visual Studio, sin embargo también aceptarán el estandard unsigned long long.

Podes obtener los límites míminos y máximos de un tipo de este modo:
Código PHP:

#include <iostream>
#include <limits>

int main() {
  
std::cout << std::numeric_limits<unsigned long long>::min() << std::endl;
  
std::cout << std::numeric_limits<unsigned long long>::max() << std::endl;
  return 
0;


Saludos :)

exmachina 26-09-2016 22:53:20

Cita:

Empezado por aguml (Mensaje 491496)
Pues eso, quisiera saber cual es más estándar de los dos ya que he buscado por Internet y no me ha quedado nada claro. ¿Y cuál es mejor usar en builder? Otra duda es saber que tendría que poner en sprintf para cada uno de ellos ya que he leído que %llu puede valer para ambos pero que unsigned long long no tiene por qué ser 64 bits en todas las máquinas.

Tanto en C++ Builder como en Visual Studio existen estos tipos de datos:

unsigned __int64 -> entero de 64 bits sin signo
__int64 -> entero de 64 bits con signo

Estos son equivalentes a los anteriores
unsigned long long -> equivale a unsigned __int64
long long -> equivale a __int64

__int(x) es especifico de microsoft


sprint:
Código PHP:

unsigned __int64 n =  std::numeric_limits<unsigned __int64>::min();
char buf[1024];
//sprintf(buf, "El valor minimo del tipo unsigned __int64 es: %I64d", n);
sprintf(buf"El valor minimo del tipo unsigned __int64/unsigned long long es: %I64d"n);

__int64 ns =  std::numeric_limits<__int64>::min();
char bufs[1024];
sprintf(bufs"El valor minimo del tipo __int64/long long es: %I64d"ns); 


aguml 28-09-2016 21:31:05

Gracias por la aclaración.


La franja horaria es GMT +2. Ahora son las 16:46:06.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi