Introducción
En este laboratorio, aprenderá sobre las variables y los tipos en C++. Aprenderá cómo definir variables y cómo utilizar diferentes tipos de variables.
💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí
En este laboratorio, aprenderá sobre las variables y los tipos en C++. Aprenderá cómo definir variables y cómo utilizar diferentes tipos de variables.
Los programas informáticos manipulan (o procesan) datos. Una variable se utiliza para almacenar un dato para su procesamiento. Se le llama variable porque se puede cambiar el valor almacenado.
Una variable es una ubicación de almacenamiento con nombre, que almacena un valor de un tipo de datos particular. En otras palabras, una variable tiene un nombre, un tipo y almacena un valor.
radio
, área
, edad
, altura
. El nombre es necesario para identificar de manera única cada variable, para asignarle un valor y recuperar el valor almacenado.int
o double
.El siguiente diagrama ilustra dos tipos de variables: int
y double
. Una variable int
almacena un entero (número entero). Una variable double
almacena un número real.
Se necesita un identificador para nombrar una variable (o cualquier otra entidad, como una función o una clase). C++ impone las siguientes reglas para los identificadores:
(a-z, A-Z)
, dígitos (0-9)
y subrayado "_"
.+
, -
, *
, /
, '@'
, etc.).int
, double
, if
, else
, for
).rose
NO es una Rose
, y NO es una ROSE
.Convenciones de Nombre de Variables
El nombre de una variable es un sustantivo o una frase nominal formada por varias palabras. La primera palabra está en minúsculas, mientras que las palabras restantes comienzan con mayúsculas, sin espacios entre las palabras. Por ejemplo, thefontSize
, roomNumber
, xMax
y thisIsAVeryLongVariableName
, que se conoce como camel case.
Recomendaciones
numberOfStudents
o numStudents
.a
, b
, c
, d
, i
, j
, k
, i1
, j99
. Evite nombres de una sola letra, a menos que sean nombres comunes como x
, y
, z
para coordenadas, i
para índice.row
para referirse a un solo número de fila y rows
para referirse a muchas filas.Antes de utilizar una variable, primero debes declarar su nombre y tipo, utilizando una de las siguientes sintaxis:
Sintaxis | Ejemplo |
---|---|
Declarar una variable de un tipo específico | int opción; |
Declarar múltiples variables del mismo tipo, separadas por comas | double suma, diferencia, producto, cociente; |
Declarar una variable y asignar un valor inicial de este tipo | int númeroMágico = 88; |
Declarar múltiples variables con valores iniciales de este tipo | double suma = 0.0, producto = 1.0; |
Por ejemplo
int nota1; // Declarar una variable int llamada nota1
nota1 = 76; // Usar nota1
int nota2; // Declarar variable int nota2
nota2 = nota1 + 10; // Usar nota2 y nota1
double promedio; // Declarar variable double promedio
promedio = (nota1 + nota2) / 2.0; // Usar promedio, nota1 y nota2
int nota1; // Error: Declarar dos veces
nota2 = "Hola"; // Error: Asignar un valor de un tipo diferente
int número; // Declarado pero no inicializado
cout << número << endl; // Usado antes de inicializarse, sin advertencia/error, pero resultado inesperado.
Tenga en cuenta que:
const
)Las constantes son variables no modificables, declaradas con la palabra clave const
. Sus valores no pueden cambiar durante la ejecución del programa. Además, const
debe inicializarse durante la declaración. Por ejemplo:
const double PI = 3.1415926; // Es necesario inicializar
Convenciones de Nombre para Constantes: Utilice palabras en mayúsculas, unidas con subrayados. Por ejemplo, MIN_VALUE
.
Una expresión es una combinación de operadores (como '+', '-', '*', '/'
) y operandos (variables o valores literales), que se puede evaluar para producir un solo valor de un cierto tipo. Por ejemplo,
1 + 2 * 3 // da int 7
int suma, número;
suma + número // se evalúa a un valor de tipo int
double capital, tasaInterés;
capital * (1 + tasaInterés) // se evalúa a un valor de tipo double
Una sentencia de asignación:
El lado derecho debe ser un valor; y el lado izquierdo debe ser una variable (o dirección de memoria).
La sintaxis de la sentencia de asignación es:
Sintaxis | Ejemplo |
---|---|
Asignar el valor literal (del lado derecho) a la variable (del lado izquierdo) | número = 88; |
Evaluar la expresión (lado derecho) y asignar el resultado a la variable (lado izquierdo) | suma = suma + número; |
La sentencia de asignación debe interpretarse de la siguiente manera: La expresión del lado derecho (RHS) se evalúa primero para producir un valor resultante (llamado rvalue o valor derecho). Luego, el rvalue se asigna a la variable del lado izquierdo (LHS) (o lvalue, que es una ubicación que puede contener un rvalue).
La siguiente tabla muestra el tamaño, el mínimo y el máximo típicos de los tipos primitivos. Una vez más, tenga en cuenta que los tamaños dependen de la implementación.
Categoría | Tipo | Descripción | Bytes(Típico) | Mínimo(Típico) | Máximo(Típico) |
---|---|---|---|---|---|
Enteros | int(ó signed int) | Entero con signo (de al menos 16 bits) | 4 (2) | -2147483648 | 2147483647 |
Enteros | unsigned int | Entero sin signo (de al menos 16 bits) | 4 (2) | 0 | 4294967295 |
Enteros | char | Carácter (puede ser con signo o sin signo, depende de la implementación) | 1 | ||
Enteros | signed char | Carácter o entero pequeño con signo (se garantiza que sea con signo) | 1 | -128 | 127 |
Enteros | unsigned char | Carácter o entero pequeño sin signo (se garantiza que sea sin signo) | 1 | 0 | 255 |
Enteros | signed short | Entero corto con signo (de al menos 16 bits) | 2 | -32768 | 32767 |
Enteros | unsigned short | Entero corto sin signo (de al menos 16 bits) | 2 | 0 | 65535 |
Enteros | long | Entero largo con signo (de al menos 32 bits) | 4 (8) | -2147483648 | 2147483647 |
Enteros | unsigned long | Entero largo sin signo (de al menos 32 bits) | 4 (8) | 0 | mismo que arriba |
Enteros | long long | Entero muy largo con signo (de al menos 64 bits) | 8 | -2e^63 | 2e^63-1 |
Enteros | unsigned long long | Entero muy largo sin signo (de al menos 64 bits) | 8 | 0 | 2e^64-1 |
Números Reales | float | Número de punto flotante, ≈7 dígitos | 4 | 3.4e^38 | 3.4e^(-38) |
Números Reales | double | Número de punto flotante de doble precisión, ≈15 dígitos | 8 | 1.7e^308 | 1.7e^(-308) |
Números Reales | long double | Número de punto flotante de doble precisión larga, ≈19 dígitos | 12 (8) | ||
Números Booleanos | bool | Valor booleano de true o false |
1 | false (0) | true (1 o no nulo) |
Caracteres Anchos | wchar_tchar16_t,char32_t | Carácter ancho (de doble byte) | 2 (4) |
El operador sizeof
C/C++ proporciona un operador unario sizeof
para obtener el tamaño del operando (en bytes). El siguiente programa utiliza el operador sizeof
para imprimir el tamaño de los tipos fundamentales (guarde el siguiente código en test.cpp
en /home/labex/Code
).
/*
* Imprime el tamaño de los tipos fundamentales.
*/
#include <iostream>
using namespace std;
int main() {
cout << "sizeof(char) es " << sizeof(char) << " bytes " << endl;
cout << "sizeof(short) es " << sizeof(short) << " bytes " << endl;
cout << "sizeof(int) es " << sizeof(int) << " bytes " << endl;
cout << "sizeof(long) es " << sizeof(long) << " bytes " << endl;
cout << "sizeof(long long) es " << sizeof(long long) << " bytes " << endl;
cout << "sizeof(float) es " << sizeof(float) << " bytes " << endl;
cout << "sizeof(double) es " << sizeof(double) << " bytes " << endl;
cout << "sizeof(long double) es " << sizeof(long double) << " bytes " << endl;
cout << "sizeof(bool) es " << sizeof(bool) << " bytes " << endl;
return 0;
}
Salida:
sizeof(char) es 1 bytes
sizeof(short) es 2 bytes
sizeof(int) es 4 bytes
sizeof(long) es 4 bytes
sizeof(long long) es 8 bytes
sizeof(float) es 4 bytes
sizeof(double) es 8 bytes
sizeof(long double) es 12 bytes
sizeof(bool) es 1 bytes
La declaración typedef
Escribir unsigned int
muchas veces puede resultar molesto. La declaración typedef
se puede utilizar para crear un nuevo nombre para un tipo existente. Por ejemplo, puede crear un nuevo tipo llamado "uint
" para "unsigned int
" de la siguiente manera. Debe colocar la declaración typedef
inmediatamente después de #include
. Utilice typedef
con cuidado porque hace que el programa sea difícil de leer y entender.
typedef unsigned int uint;
Muchos compiladores C/C++ definen un tipo llamado size_t
, que es un typedef
de unsigned int
.
typedef unsigned int size_t;
Literales enteros
Un número entero, como 123
y -456
, por defecto se trata como un int
. Por ejemplo,
int número = -123;
int suma = 4567;
Además de los enteros en base 10 por defecto, puede usar un prefijo '0x'
para un valor en hexadecimal y prefijo '0b'
para un valor binario (en algunos compiladores), por ejemplo,
int número1 = 1234; // Decimal
int número2 = 01234; // Octal 1234, Decimal 2322
int número3 = 0x1abc; // hexadecimal 1ABC, decimal 15274
int número4 = 0b10001001; // binario (puede no funcionar en algunos compiladores)
Un literal long
se identifica por un sufijo 'L'
o 'l'
(evite el minúsculo, que puede confundirse con el número uno). Un long long int
se identifica por un sufijo 'LL'
. También puede usar el sufijo 'U'
para unsigned int
, 'UL'
para unsigned long
y 'ULL'
para unsigned long long int
. Por ejemplo,
long número = 12345678L; // Sufijo 'L' para long
long suma = 123; // int 123 se convierte automáticamente a long 123L
long long granNúmero = 987654321LL; // Se necesita el sufijo 'LL' para long long int
No es necesario un sufijo para los literales short
. Pero solo puede usar valores enteros en el rango permitido. Por ejemplo,
short númeroMediano = -12345;
Literales de punto flotante
Un número con punto decimal, como 55.66
y -33.44
, por defecto se trata como un double
. También se pueden expresar en notación científica, por ejemplo, 1.2e3
, -5.5E-6
, donde e
o E
denota el exponente en potencia de 10. Puede anteponer la parte fraccionaria o el exponente con un signo más (+
) o menos (-
). El exponente debe ser un entero.
DEBE usar un sufijo de 'f'
o 'F'
para los literales float
, por ejemplo, -1.2345F
. Por ejemplo,
float promedio = 55.66; // Error! El lado derecho es un double. Se necesita el sufijo 'f' para float.
float promedio = 55.66f;
Use el sufijo 'L'
(o 'l'
) para long double
.
Literales bool
Solo hay dos literales bool
, es decir, true
y false
. Por ejemplo,
bool hecho = true;
bool juegoTerminado = false;
int i;
if (i == 9) { // devuelve true o false
......
}
Literales de carácter
Un literal de char
imprimible se escribe encerrando el carácter entre una pareja de comillas simples, por ejemplo, 'z'
, '$'
y '9'
. En C++, los caracteres se representan usando el código ASCII de 8 bits y pueden tratarse como enteros con signo de 8 bits en operaciones aritméticas. En otras palabras, char
y entero con signo de 8 bits son intercambiables. También puede asignar un entero en el rango de [-128, 127]
a una variable de tipo char
; y [0, 255]
a un unsigned char
. Por ejemplo,
char letra = 'a'; // Lo mismo que 97
char otraLetra = 98; // Lo mismo que la letra 'b'
cout << letra << endl; // Se imprime 'a'
cout << otraLetra << endl; // Se imprime 'b' en lugar del número
otraLetra += 2; // 100 o 'd'
cout << otraLetra << endl; // Se imprime 'd'
cout << (int)otraLetra << endl; // Se imprime 100
Literales de cadena
Un literal de String
está compuesto por cero o más caracteres rodeados por una pareja de comillas dobles, por ejemplo, "Hello, world!"
, "The sum is "
, ""
. Por ejemplo,
String mensajeDirección = "Turn Right";
String mensajeSaludo = "Hello";
String mensajeEstado = ""; // cadena vacía
Ejemplo (Literales)
/* Probando Tipos Primarios */
#include <iostream>
using namespace std;
int main() {
char género ='m'; // char está entre comillas simples
bool casado = true; // true(non-cero) o false(0)
unsigned short numHijos = 8; // [0, 255]
short añoNacimiento = 1945; // [-32767, 32768]
unsigned int salario = 88000; // [0, 4294967295]
double peso = 88.88; // Con parte fraccionaria
float promedioAcadémico = 3.88f; // Se necesita el sufijo 'f' para float
// "cout <<" se puede usar para imprimir el valor de cualquier tipo
cout << "Género es " << género << endl;
cout << "Está casado es " << casado << endl;
cout << "Número de hijos es " << numHijos << endl;
cout << "Año de nacimiento es " << añoNacimiento << endl;
cout << "Salario es " << salario << endl;
cout << "Peso es " << peso << endl;
cout << "Promedio Académico es " << promedioAcadémico << endl;
return 0;
}
Salida:
Género es m
Está casado es 1 // true
Número de hijos es 8
Año de nacimiento es 1945
Salario es 88000
Peso es 88.88
Promedio Académico es 3.88
En esta parte, introdujimos varios tipos fundamentales. Deberías saber cómo representar una variable y cómo operar con ella. Tenga en cuenta cuál es el tamaño de cada tipo en la memoria y el rango para cada tipo.