No hace mucho tiempo, alguien me dijo que long
no son 64 bits en máquinas de 64 bits y que siempre debería usar int
. Esto no tenía sentido para mí. He visto documentos (como el del sitio oficial de Apple) que dicen que en long
realidad son 64 bits al compilar una CPU de 64 bits. Miré qué era en Windows de 64 bits y encontré
- Windows:
long
yint
permanecen de 32 bits de longitud, y se definen nuevos tipos de datos especiales para enteros de 64 bits.
(de http://www.intel.com/cd/ids/developer/asmo-na/eng/197664.htm?page=2 )
¿Qué debo usar? ¿Debo definir algo como uw
, sw
((sin) ancho firmado) como long
si no en Windows, y de lo contrario hacer una verificación en el tamaño de bits de la CPU de destino?
sizeof(long) == 8
, incluso en Windows :-)
size_t
o un tipo de iterador para iterar, no int
oint64_t
size_t
esto se vuelve complicado cerca de los números negativos, porque size_t
no está firmado. Así for(size_t i=0; i<v.size()-2; i++)
falla por tamaño del vector 0 y 1. Otro ejemplo: for(size_t i=v.size()-1; i>=0; i--)
.
size_t
valores, entonces el resultado debe mantenerse en una variable de ptrdiff_t
tipo, ¡que está diseñado para ser lo suficientemente grande como para contener dicho resultado y es un tipo con signo precisamente por esa razón!)