En este artículo, veremos qué sucedió cuando superamos el rango válido de tipos de datos integrados en C++ con algunos ejemplos.
Ejemplo 1: Programa para mostrar qué sucede cuando cruzamos el rango de ‘char’.
Aquí, a se declara como char. Aquí el bucle funciona de 0 a 225. Por lo tanto, debe imprimir de 0 a 225 y luego detenerse. Pero generará un bucle infinito. La razón de esto es que el rango válido de datos de caracteres es de -128 a 127. Cuando ‘a’ se convierte en 128 a ++, se excede el rango y, como resultado, el primer número del lado negativo del rango (es decir, -128) se asigna a a. Como resultado de esto, la ‘a’ nunca llegará al punto 225, por lo que imprimirá la serie infinita de caracteres.
CPP
// C++ program to demonstrate // the problem with 'char' #include <iostream> using namespace std; int main() { for (char a = 0; a <= 225; a++) cout << a; return 0; }
Este código imprimirá ‘1’ tiempo infinito porque aquí ‘a’ se declara como ‘bool’ y su rango válido es de 0 a 1. Y para una variable booleana, todo lo que no sea 0 es 1 (o verdadero). Cuando ‘a’ intenta convertirse en 2 (a través de a++), 1 se asigna a ‘a’. La condición a<=5 se cumple y el control permanece dentro del bucle.
Ejemplo 2: Programa para mostrar qué sucede cuando cruzamos el rango de ‘bool’
CPP
// C++ program to demonstrate // the problem with 'bool' #include <iostream> using namespace std; int main() { // declaring Boolean // variable with true value bool a = true; for (a = 1; a <= 5; a++) cout << a; return 0; }
¿Este código imprimirá ‘a’ hasta que se convierta en 32770? Bueno, la respuesta es un ciclo indefinido porque aquí ‘a’ se declara como corto y su rango válido es -32768 a +32767. Cuando ‘a’ intenta convertirse en 32768 a través de a++, se excede el rango y, como resultado, el primer número del lado negativo del rango (es decir, -32768) se asigna a a. Por lo tanto, se cumple la condición «a < 32770» y el control permanece dentro del bucle.
Ejemplo 3: Programa para mostrar lo que sucede cuando cruzamos el rango de ‘corto’
Tenga en cuenta que short es la abreviatura de short int. son sinónimos. corto, int corto, corto con signo e int corto con signo son todos del mismo tipo de datos.
CPP
// C++ program to demonstrate // the problem with 'short' #include <iostream> using namespace std; int main() { // declaring short variable short a; for (a = 32767; a < 32770; a++) cout << a << "\n"; return 0; }
Ejemplo 4: Programa para mostrar lo que sucede cuando cruzamos el rango de ‘corto sin firmar’
CPP
// C++ program to demonstrate // the problem with 'unsigned short' #include <iostream> using namespace std; int main() { unsigned short a; for (a = 65532; a < 65536; a++) cout << a << "\n"; return 0; }
¿Este código imprimirá ‘a’ hasta que se convierta en 65536? Bueno, la respuesta es un ciclo indefinido, porque aquí ‘a’ se declara como corto y su rango válido es de 0 a +65535. Cuando ‘a’ intenta convertirse en 65536 a través de a++, se excede el rango y, como resultado, el primer número del rango (es decir, 0) se asigna a a. Por lo tanto, se cumple la condición «a < 65536» y el control permanece dentro del bucle.
Explicación: sabemos que la computadora usa el complemento a 2 para representar datos. Por ejemplo, si tenemos 1 byte (podemos usar char y usar %d como especificador de formato para verlo como un decimal), podemos representar -128 a 127. Si sumamos 1 a 127, obtendremos -128. Eso es porque 127 es 01111111 en binario. Y si sumamos 1 en 01111111 obtendremos 10000000. 10000000 es -128 en forma de complemento a 2. Lo mismo sucederá si usamos números enteros sin signo. 255 es 11111111 cuando agregamos 1 a 11111111 obtenemos 100000000. Pero estamos usando solo los primeros 8 bits, por lo que es 0. Por lo tanto, obtenemos 0 después de agregar 1 en 255.
Este artículo es una contribución de Aditya Rakhecha y mejorado por Sakshi Tiwari . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA