Representar valores negativos en C++

Mohd Mohtashim Nawaz 12 octubre 2023
  1. Métodos para representar valores negativos en C++
  2. Entero negativo de magnitud máxima mediante desplazamiento de bits en C++
  3. Conclusión
Representar valores negativos en C++

C++ puede representar valores positivos y negativos. Este artículo analiza cómo C++ representa valores negativos.

Métodos para representar valores negativos en C++

No existe una regla para representar valores negativos en C++. Por lo tanto, los proveedores pueden elegir sus detalles de implementación para representar un valor negativo en C++.

Sin embargo, hay tres métodos comunes para representar números negativos.

  1. Magnitud con signo: el método menos utilizado para representar números con signo. En este método, se fija un bit especial para representar el signo del número.

    El resto de los bits representan la magnitud del número. Sin embargo, este método tiene serios problemas cuando se implementa en computadoras, especialmente al realizar operaciones aritméticas con números negativos.

  2. Complemento a uno: en este método, un número negativo se representa convirtiendo el bit 0 en 1 y viceversa a partir de la representación de bits del número positivo correspondiente.

    Recuerda que el bit más a la izquierda representa el signo del número. 0 representa un signo positivo, mientras que 1 representa un signo negativo.

    Sin embargo, este método tiene la falla de que hay dos representaciones diferentes de +0 y -0 al usar este método.

  3. Complemento a dos: este es el método más utilizado para representar números negativos. En este método, se fija un bit de signo para representar el signo.

    Si se encuentra un número negativo, se calcula su representación de bits. Después de eso, los bits se invierten y se les suma 1.

    Veamos un ejemplo.

    Number: -6
    Sign: -ve so sign bit = 1
    Bitwise representation of 6: 000110
    Two's complement: 111001+1 = 111010
    So the number is represented as 1111010
    

Este método supera las deficiencias del método del complemento de uno.

Entero negativo de magnitud máxima mediante desplazamiento de bits en C++

Puede obtener el valor máximo del tipo de datos entero cambiando los bits para que todos los bits, excepto el bit de signo, sean 1.

Tiene una representación entera de 8 bits (solo por ejemplo). La representación de -1 es la siguiente.

Number: -1
Sign: -ve so sign bit = 1
Bitwise representation of 1: 000 0001
Two's complement: 111 1110 + 1 = 111 1111
So -1 is represented as 1111 1111.

Si desplaza -1 a la izquierda un lugar, su representación binaria se convierte en 0111 1111.

Esto representa el número máximo. Puede obtener el número negativo más pequeño (valor mínimo) simplemente invirtiendo los bits.

Veamos el código.

#include <iostream>

using namespace std;

int getLargest() {
  int num = -1u >> 1;
  return num;
}

int getSmallest() {
  int num = -1u >> 1;
  num = ~num;

  return num;
}

int main() {
  cout << "Maximum value: " << getLargest() << endl;
  cout << "Minimum value:" << getSmallest() << endl;
  return 0;
}

Producción :

Maximum value: 2147483647
Minimum value:-2147483648

Conclusión

Debe tener en cuenta que los valores máximo y mínimo del entero pueden ser diferentes según el proveedor del compilador de C++ y la máquina. El ejemplo de este artículo muestra los resultados de una representación de enteros de 32 bits.

Artículo relacionado - C++ Number