Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Mario Olivera en 19 Mayo 2015, 17:13 pm



Título: Pregunta sobre variable integer
Publicado por: Mario Olivera en 19 Mayo 2015, 17:13 pm
 Hola gente, me surgio una pregunta, hice un código que evalua los numeros factoriales del 1 al 20, la variable de tipo int resultado me muestra cada resultado de la multiplicación, se que una variable int si mal no recuerdo va desde -32768 a 32767, pero llega a valer: 2004189184.

Todo esto esta en un ciclo for... la viariable por si sola se transforma en una long int?


Título: Re: Pregunta sobre variable integer
Publicado por: Stakewinner00 en 19 Mayo 2015, 17:46 pm
El tipo de unsigned int va desde 0 hasta 4294967296 (32 bits), un int signado va desde -2147483647 hasta 2147483648 creo. 2004189184 cabe perfectamente en un int.

http://en.cppreference.com/w/cpp/language/types


Título: Re: Pregunta sobre variable integer
Publicado por: Seyro97 en 19 Mayo 2015, 21:43 pm
El tamaño de una variable de tipo int en memoria depende de cada compilador. Por ejemplo, Las variables de tipo short en mingw me parece que ocupaban 4 bytes, y en el compilador de VS2013 ocupaban 2 bytes (o al revés, no me acuerdo).

Para saber el tamaño de las variables de un cierto tipo, usas algo que se parece a una función: sizeof(tipo o variable) (aunque en realidad no es una función)

Por ejemplo:
Código
  1. #include <iostream>
  2.  
  3. int main() {
  4. long long variable = 0;
  5.  
  6. std::cout << "El tipo de variable 'int' ocupa " << sizeof(int) << " bytes" << std::endl;
  7. std::cout << "La variable 'variable' ocupa en memoria RAM " << sizeof(variable) << " bytes" << std::endl;
  8.  
  9. std::cin.get();
  10. return 0;
  11. }

El resultado saldría (programa compilado en el compilador del VisualStudio 2013):
Código
  1. El tipo de variable 'int' ocupa 4 bytes
  2. La variable 'variable' ocupa en memoria RAM 8 bytes

A la pregunta que inicialmente se ha preguntado en este "post", no, la variable no se convierte automáticamente en tiempo de ejecución cuando se llena. Lo que hace es castearse. Esto quiere decir que si tu representas el número grande como 01001001001100100001001010101101101100001010010101001010010, y lo intentas guardar en una variable de tamaño 4 bytes (32 bits) (y la de antes ocuparía mas de 2 bytes),  entonces se tomarían los primeros 32 ceros y unos y se les asignaría la memoria: 01001001001100100001001010101101101100001010010101001010010

Lo que está en negrita son los primeros 32 estados, y el resto es información que se pierde. Entonces, es como si asignáramos a la variable el valor 101101101100001010010101001010010 en decimal.

Espero que se entienda :P