Représenter les valeurs négatives en C++

Mohd Mohtashim Nawaz 12 octobre 2023
  1. Méthodes pour représenter les valeurs négatives en C++
  2. Entier négatif de grandeur maximale utilisant le décalage de bits en C++
  3. Conclusion
Représenter les valeurs négatives en C++

C++ peut représenter des valeurs positives aussi bien que négatives. Cet article explique comment C++ représente les valeurs négatives.

Méthodes pour représenter les valeurs négatives en C++

Il n’y a pas de règle pour représenter les valeurs négatives en C++. Par conséquent, les fournisseurs peuvent choisir leurs détails d’implémentation pour représenter une valeur négative en C++.

Cependant, il existe trois méthodes courantes pour représenter les nombres négatifs.

  1. Magnitude signée - la méthode la moins utilisée pour représenter les nombres signés. Dans cette méthode, un bit spécial est fixé pour représenter le signe du nombre.

    Le reste des bits représente la magnitude du nombre. Cependant, cette méthode présente de sérieux problèmes lorsqu’elle est mise en œuvre dans les ordinateurs, en particulier lors de l’exécution d’opérations arithmétiques sur des nombres négatifs.

  2. Complément à un - Dans cette méthode, un nombre négatif est représenté en convertissant le bit 0 en 1 et vice versa à partir de la représentation binaire du nombre positif correspondant.

    Rappelez-vous que le bit le plus à gauche représente le signe du nombre. 0 représente un signe positif, tandis que 1 représente un signe négatif.

    Cependant, cette méthode a un défaut en ce sens qu’il existe deux représentations différentes de +0 et -0 lors de l’utilisation de cette méthode.

  3. Complément à deux - C’est la méthode la plus utilisée pour représenter les nombres négatifs. Dans cette méthode, un bit de signe est fixé pour représenter le signe.

    Si un nombre négatif est rencontré, sa représentation binaire est calculée. Après cela, les bits sont inversés et 1 leur est ajouté.

    Voyons un exemple.

    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
    

Cette méthode surmonte les lacunes de la méthode du complément à un.

Entier négatif de grandeur maximale utilisant le décalage de bits en C++

Vous pouvez obtenir la valeur maximale du type de données entier en décalant les bits de sorte que tous les bits sauf le bit de signe soient 1.

Vous avez une représentation entière 8 bits (par exemple uniquement). La représentation de -1 est donnée ci-dessous.

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 vous déplacez -1 vers la gauche d’une position, sa représentation binaire devient 0111 1111.

Cela représente le nombre maximum. Vous pouvez obtenir le plus petit nombre négatif (valeur minimale) en inversant simplement les bits.

Voyons le code.

#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;
}

Production:

Maximum value: 2147483647
Minimum value:-2147483648

Conclusion

Vous devez noter que les valeurs maximales et minimales de l’entier peuvent être différentes selon le fournisseur du compilateur C++ et la machine. L’exemple de cet article montre les résultats d’une représentation 32 bits d’entiers.

Article connexe - C++ Number