Comparación entre expresiones enteras con y sin signo en C++
C++ es un lenguaje de programación de propósito general. Fue diseñado con un sesgo hacia la programación de sistemas, pero también se usa ampliamente en el mundo de los negocios.
Comparación entre expresiones enteras con y sin signo en C++
C++ admite enteros con y sin signo, que se escriben como int
y int sin signo
. Cuando usa enteros con signo, puede usar los operadores relacionales para comparar dos valores.
Los operadores relacionales no funcionarán porque siempre evalúan false
o true
cuando usan números enteros sin signo.
Los números con signo suelen ser más rápidos que los enteros sin signo en la mayoría de los procesadores porque utilizan menos memoria que los enteros sin signo.
Los enteros con signo requieren más memoria que los enteros sin signo porque almacenan números negativos y positivos. Esto significa que los enteros con signo usarán más memoria para una determinada cantidad de datos que los sin signo.
Mientras que los enteros sin signo pueden representar solo números positivos, si agrega dos valores diferentes, siempre obtendrá un resultado con el mismo signo (+
o -
) para los enteros sin signo. Para enteros con signo, si sumas dos valores diferentes, obtendrás un resultado con dos signos diferentes (+
o -
).
Advertencia del compilador de C++
Los compiladores advierten comparaciones entre tipos firmados y no firmados porque los rangos de int
firmados y no firmados varían y pueden ofrecer un rendimiento inesperado.
Tampoco puede garantizar la seguridad de su programa porque se mezclan expresiones enteras con y sin signo. Esto puede suceder cuando un número negativo se convierte en un tipo sin signo, o un número positivo se convierte en uno con signo.
El compilador no le avisará si la expresión tiene solo un operando, un tipo con signo, cuyo valor se ajusta al tipo de destino.
Analicemos un ejemplo para comprender mejor cómo advierte el compilador.
#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;
}
Haga clic en este enlace para ver la demostración en vivo del código.
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