Comparaison entre les expressions entières signées et non signées en C++

Muhammad Adil 11 décembre 2023
Comparaison entre les expressions entières signées et non signées en C++

C++ est un langage de programmation à usage général. Il a été conçu avec un parti pris pour la programmation système, mais est également largement utilisé dans le monde des affaires.

Comparaison entre les expressions entières signées et non signées en C++

C++ prend en charge les entiers signés et non signés, qui sont écrits sous la forme int et unsigned int. Lorsque vous utilisez des entiers signés, vous pouvez utiliser les opérateurs relationnels pour comparer deux valeurs.

Les opérateurs relationnels ne fonctionneront pas car ils évaluent toujours false ou true lors de l’utilisation d’entiers non signés.

Les nombres signés sont généralement plus rapides que les entiers non signés sur la plupart des processeurs car ils utilisent moins de mémoire que les entiers non signés.

Les entiers signés nécessitent plus de mémoire que les entiers non signés car ils stockent des nombres négatifs et positifs. Cela signifie que les entiers signés utiliseront plus de mémoire pour une quantité donnée de données que les entiers non signés.

Alors que les entiers non signés ne peuvent représenter que des nombres positifs, si vous additionnez deux valeurs différentes, vous obtiendrez toujours un résultat avec le même signe (+ ou -) pour les entiers non signés. Pour les entiers signés, si vous additionnez deux valeurs différentes, vous obtiendrez un résultat avec deux signes différents (+ ou -).

Avertissement du compilateur C++

Les compilateurs mettent en garde contre les comparaisons entre les types signés et non signés car les plages de int signés et non signés varient et peuvent fournir des performances inattendues.

Il ne peut pas non plus garantir la sécurité de votre programme car les expressions entières signées et non signées sont mélangées. Cela peut se produire lorsqu’un nombre négatif est converti en un type non signé ou qu’un nombre positif est converti en un type signé.

Le compilateur ne vous avertira pas si l’expression n’a qu’un seul opérande, un type signé, dont la valeur correspond au type de destination.

Examinons un exemple pour mieux comprendre comment le compilateur avertit.

#include <iostream>
#include <string>
using namespace std;

int helloWorld(string input);
int main() {
  string input;
  input = "sample";
  helloWorld(input);
}
int helloWorld(string input) {
  int demo = 0;
  for (int x = 0; x < input.length(); x++) {
    if (input.substr(x, 4) == " ") {
      demo++;
    }
  }
  cout << demo;
}

Cliquez sur ce lien pour vérifier la démonstration en direct du code.

Muhammad Adil avatar Muhammad Adil avatar

Muhammad Adil is a seasoned programmer and writer who has experience in various fields. He has been programming for over 5 years and have always loved the thrill of solving complex problems. He has skilled in PHP, Python, C++, Java, JavaScript, Ruby on Rails, AngularJS, ReactJS, HTML5 and CSS3. He enjoys putting his experience and knowledge into words.

Facebook

Article connexe - C++ Integer