¿Por qué el tamaño entero varía de una computadora a otra?

En una computadora, la memoria está compuesta por una memoria digital que almacena información en formato binario , y la unidad más baja se llama bit (dígito binario). El bit único denota un valor lógico que consta de dos estados, o o 1. Un bit es parte del sistema numérico binario. Usando la combinación de estos bits, cualquier número entero puede ser representado por el sistema numérico decimal. 

Como la información digital se almacena en bits binarios, las computadoras usan un sistema numérico binario para representar todos los números, como los enteros. Un byte es un grupo de 8 bits. En lenguajes de programación como C , es posible declarar variables usando el tipo de esa variable, por lo que para almacenar valores numéricos en la memoria de la computadora, usamos la cantidad de bits internamente para representar números enteros (int).

¿Cómo se almacenan los números enteros en la memoria?

Integer storage memory

En la figura anterior se puede observar cómo se almacena el entero en la memoria principal. La figura anterior muestra cómo el número decimal, es decir, el número de base 10 se convierte en binario, es decir, el sistema numérico de base 2, y cómo se almacena exactamente en la memoria.

¿Por qué el tamaño del entero varía de una computadora a otra?

Esta sección se enfoca en discutir algunas razones por las cuales el tamaño de los enteros varía de una computadora a otra. A continuación se presentan las razones-

  1. El objetivo de C y C++ es proporcionar código en tiempo récord en todas las máquinas. Si los compiladores tuvieran que asegurarse de que un int puede tener un tamaño poco común para esa máquina, podría requerir instrucciones adicionales. Para casi todas las circunstancias, eso no es obligatorio, todo lo que se requiere es que sea lo suficientemente grande para lo que el usuario pretende hacer con él.
  2. Entre los beneficios de C y C++ está que hay compiladores que se enfocan en una gran variedad de máquinas, desde pequeños microcontroladores de 8 bits y 16 bits hasta grandes procesadores multinúcleo de 64 bits. Y, de hecho, algunas máquinas de 18, 24 o 36 bits también. Si alguna máquina presenta un tamaño nativo de 36 bits, el usuario no estaría muy contento si, porque algún estándar lo dice, obtiene la mitad del rendimiento en matemáticas enteras gracias a instrucciones adicionales y no puede usar los 4 bits más altos de un En t.
  3. Un pequeño microprocesador con registros de 8 bits a menudo tiene soporte para probar sumas y restas de 16 bits (y quizás también multiplicaciones y divisiones), pero las matemáticas de 32 bits implicarían duplicar esas instrucciones y también más trabajo para multiplicar y dividir. Por lo tanto, los enteros de 16 bits (2 bytes) tendrían mucho más sentido en un procesador tan pequeño, especialmente porque la memoria quizás tampoco sea muy grande, por lo que almacenar 4 bytes para cada entero puede ser un desperdicio.
  4. Para una máquina de 32 o 64 bits, el rango de memoria es presumiblemente mucho más grande, por lo que tener números enteros más grandes no es un gran inconveniente, y las operaciones con números enteros de 32 bits tienen una velocidad equivalente a la de los más pequeños y, en algunos casos, «mejores». ”- por ejemplo, en x86, una operación matemática básica de 16 bits como la suma o la resta requiere un byte de prefijo adicional para mencionar “hacer esto de 16 bits”, por lo que las matemáticas en enteros de 16 bits ocuparían más espacio de código.

Esto no es universalmente cierto, pero a menudo es cierto. No es realmente útil extender un int a 64 bits. Desperdicia espacio. Si es necesario, uno puede tener una longitud de 64 bits y aún así tener un int de 32 bits. De lo contrario, deje solo long long para aquellos casos en los que se requieran enteros de 64 bits. La mayoría de las implementaciones actuales tienen la longitud anterior de 64 bits. Hay enteros de 16 bits (cortos), enteros de 32 bits (int) y enteros de 64 bits (largos y largos), todos los cuales son compatibles con el hardware (en el caso de x86), lo que permite a un usuario para seleccionar un tipo apropiado para cada variable. Generalmente, a menos que haya una buena razón para el hardware, no es útil formar tipos más grandes que su tamaño mínimo, ya que los programas que cumplen con los estándares no pueden esperar que sean más grandes de todos modos y deben funcionar correctamente con el tamaño mínimo.

¿Por qué Int no es de 16 bits?

Eran de 32 bits en las plataformas de 32 bits; la codificación de instrucciones para operandos de 16 bits (tanto en 32 bits como en 64 bits) es un byte más larga que la de los operandos de 32 bits. Y si se almacena un valor de 16 bits durante una operación de registro, el resto del registro no se puede usar, ni en 32 bits ni en 64 bits, porque no hay codificación de instrucciones para el «registro de mitad superior de 32 bits». Entonces, 32 bits es una especie de tamaño natural para un operando.

A continuación se muestra un programa en C++ para demostrar el tamaño de un número entero en un sistema de 64 bits:

C++14

// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
  
// Driver Code
int main()
{
    // sizeof() operator is used to
    // give the size in bytes
    cout << sizeof(int);
  
    return 0;
}
Producción:

4
Producción

4

A continuación se muestra un programa en C++ para demostrar el tamaño de un número entero en un sistema de 32 bits (x86):

C++14

// C++ program to implement
// above approach
#include <iostream>
using namespace std;
  
// Driver code
int main()
{
    // sizeof() operator is used
    // to give the size in bytes
    cout << sizeof(int);
    return 0;
}
Producción:

4

Producción

2

Ventajas de variar el tamaño del entero:

  1. Uno de los beneficios de variar el tamaño es que se requieren menos ciclos de CPU para leer o escribir.
  2. El uso eficiente de una arquitectura determinada depende de los sistemas de 32 bits o de 64 bits.

Desventajas de variar el tamaño del entero:

  1. La variación en diferentes arquitecturas no le da al programador una visión clara sobre el tamaño de los números enteros para tomar decisiones de tipos para cálculos posteriores.
  2. Puede causar varios problemas en la memoria si se usa incorrectamente para malos propósitos, lo que lleva a admitir algunos ataques, como el desbordamiento del búfer.
  3. Puede ocurrir un desbordamiento de enteros si algún programa intenta almacenar un valor en una variable entera mayor que el valor máximo que la variable puede almacenar.
  4. Diferentes tamaños pueden usar múltiples registros de CPU. Por ejemplo, si es necesario almacenar un número mayor que 2^32 en una máquina de 32 bits, entonces se requieren dos registros, lo mismo para una máquina de 64 bits.

Publicación traducida automáticamente

Artículo escrito por coder36 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *