Variables y Tipos de Datos en C++

C++Beginner
Practicar Ahora

Introducción

En este laboratorio, aprenderás cómo trabajar con variables y tipos de datos en C++. Explorarás diferentes tamaños de variables enteras, inicializarás variables de tipo float y double, declararás variables de tipo carácter y cadena, realizarás conversiones de tipo (type casting), definirás constantes, utilizarás variables booleanas y comprobarás el tamaño de memoria de varios tipos de datos. Además, aprenderás cómo manejar situaciones de desbordamiento entero (integer overflow). Esta experiencia práctica te proporcionará una base sólida para manejar datos en tus proyectos de programación en C++.

Declarar Variables Enteras con Diferentes Tamaños (short, int, long)

En este paso, aprenderás sobre diferentes tipos de variables enteras en C++ y cómo declarar variables con diferentes tamaños de memoria. C++ ofrece múltiples tipos enteros para ayudarte a elegir el almacenamiento más adecuado para tus datos.

Abre el WebIDE y crea un nuevo archivo llamado integer_variables.cpp en el directorio ~/project:

touch ~/project/integer_variables.cpp

Agrega el siguiente código al archivo integer_variables.cpp:

#include <iostream>

int main() {
    // Declarando un entero corto (generalmente 2 bytes)
    short smallNumber = 32767;

    // Declarando un entero estándar (generalmente 4 bytes)
    int regularNumber = 2147483647;

    // Declarando un entero largo (generalmente 4 u 8 bytes)
    long largeNumber = 9223372036854775807L;

    // Imprimiendo los valores de diferentes tipos enteros
    std::cout << "Short Integer: " << smallNumber << std::endl;
    std::cout << "Regular Integer: " << regularNumber << std::endl;
    std::cout << "Long Integer: " << largeNumber << std::endl;

    return 0;
}

Analicemos los tipos enteros:

  1. short:

    • Tipo entero más pequeño
    • Generalmente utiliza 2 bytes de memoria
    • Rango: -32,768 a 32,767
  2. int:

    • Tipo entero estándar
    • Generalmente utiliza 4 bytes de memoria
    • Rango: -2,147,483,648 a 2,147,483,647
  3. long:

    • Tipo entero más grande
    • Puede ser de 4 u 8 bytes dependiendo del sistema
    • Rango: -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807

Compila y ejecuta el programa:

g++ integer_variables.cpp -o integer_variables
./integer_variables

Ejemplo de salida:

Short Integer: 32767
Regular Integer: 2147483647
Long Integer: 9223372036854775807

Puntos clave a recordar:

  • Elige el tipo entero en función del rango de valores que necesites almacenar
  • El sufijo L para enteros largos asegura una interpretación correcta del tipo
  • Diferentes sistemas pueden tener tamaños de memoria ligeramente diferentes para estos tipos

Comprender los tipos enteros y sus rangos es fundamental para la programación en C++. Estos tipos proporcionan diferentes asignaciones de memoria para almacenar de manera eficiente diversos rangos de números enteros. Visualicemos cómo estos tipos se ajustan al sistema de tipos más amplio de C++:

graph LR A[C++ Data Types] --> B[Fundamental Types] A --> C[Derived Types] B --> D[Integer Types] B --> E[Floating-Point Types] B --> F[Character Types] B --> G[Boolean] D --> D1[short] D --> D2[int] D --> D3[long] D --> D4[long long] E --> E1[float] E --> E2[double] E --> E3[long double] F --> F1[char] F --> F2[wchar_t] C --> H[Arrays] C --> I[Pointers] C --> J[References] C --> K[std::string] style A fill:#f9f,stroke:#333,stroke-width:2px style B fill:#bbf,stroke:#333 style C fill:#bbf,stroke:#333

Aprenderemos sobre tipos de punto flotante, tipos de carácter y tipos booleanos en los siguientes pasos.

Inicializar Variables Float y Double con Puntos Decimales

En este paso, aprenderás sobre las variables de punto flotante en C++, específicamente los tipos float y double, que te permiten trabajar con números decimales. Estos tipos son esenciales para representar números con partes fraccionarias.

Abre el WebIDE y crea un nuevo archivo llamado floating_point.cpp en el directorio ~/project:

touch ~/project/floating_point.cpp

Agrega el siguiente código al archivo floating_point.cpp:

#include <iostream>
#include <iomanip>

int main() {
    // Declarando e inicializando variables de tipo float
    float smallDecimal = 3.14f;  // El sufijo 'f' indica que es un float
    float scientificNotation = 2.5e3f;  // 2.5 × 10^3 = 2500.0

    // Declarando e inicializando variables de tipo double
    double preciseDecimal = 3.14159265359;
    double largeDecimal = 1.23456789e10;  // 12,345,678,900.0

    // Estableciendo la precisión para la salida decimal
    std::cout << std::fixed << std::setprecision(4);

    // Imprimiendo valores de tipo float
    std::cout << "Float Values:" << std::endl;
    std::cout << "Small Decimal: " << smallDecimal << std::endl;
    std::cout << "Scientific Notation: " << scientificNotation << std::endl;

    // Imprimiendo valores de tipo double
    std::cout << "\nDouble Values:" << std::endl;
    std::cout << "Precise Decimal: " << preciseDecimal << std::endl;
    std::cout << "Large Decimal: " << largeDecimal << std::endl;

    return 0;
}

Analicemos los tipos de punto flotante:

  1. float:

    • Tipo de punto flotante de precisión simple
    • Generalmente utiliza 4 bytes de memoria
    • Menos preciso, adecuado para cálculos decimales básicos
    • Utiliza el sufijo 'f' al inicializar
  2. double:

    • Tipo de punto flotante de doble precisión
    • Generalmente utiliza 8 bytes de memoria
    • Más preciso, preferido para la mayoría de los cálculos decimales
    • Puede representar números decimales más grandes y precisos

Compila y ejecuta el programa:

g++ floating_point.cpp -o floating_point
./floating_point

Ejemplo de salida:

Float Values:
Small Decimal: 3.1416
Scientific Notation: 2500.0000

Double Values:
Precise Decimal: 3.1416
Large Decimal: 12345678900.0000

Puntos clave a recordar:

  • Utiliza float para números decimales más pequeños y menos precisos
  • Utiliza double para cálculos más precisos
  • El sufijo 'f' es importante para los literales de tipo float
  • La notación científica permite representar números muy grandes o pequeños
  • std::fixed y std::setprecision() ayudan a controlar la salida decimal

Declarar e Inicializar Variables de Caracteres con Comillas Simples

En este paso, aprenderás sobre las variables de carácter en C++, que se utilizan para almacenar caracteres individuales y se declaran utilizando comillas simples. Los caracteres son tipos de datos fundamentales que representan letras, números o símbolos individuales.

Abre el WebIDE y crea un nuevo archivo llamado character_variables.cpp en el directorio ~/project:

touch ~/project/character_variables.cpp

Agrega el siguiente código al archivo character_variables.cpp:

#include <iostream>

int main() {
    // Declarando e inicializando variables de carácter
    char letter = 'A';
    char number = '7';
    char symbol = '$';

    // Imprimiendo valores de carácter
    std::cout << "Letter: " << letter << std::endl;
    std::cout << "Number: " << number << std::endl;
    std::cout << "Symbol: " << symbol << std::endl;

    // Demostrando aritmética de caracteres
    char nextLetter = letter + 1;
    std::cout << "Next Letter: " << nextLetter << std::endl;

    // Valor ASCII de los caracteres
    std::cout << "ASCII value of 'A': " << (int)letter << std::endl;

    return 0;
}

Analicemos las variables de carácter:

  1. Declaración:

    • Utiliza la palabra clave char
    • Siempre se inicializa con comillas simples ''
    • Puede almacenar un solo carácter
  2. Tipos de carácter:

    • Letras: 'A', 'b', 'Z'
    • Números: '0', '7', '9'
    • Símbolos: '$', '@', '#'
  3. Aritmética de caracteres:

    • Los caracteres se pueden manipular utilizando operaciones enteras
    • Cada carácter tiene un valor ASCII subyacente

Compila y ejecuta el programa:

g++ character_variables.cpp -o character_variables
./character_variables

Ejemplo de salida:

Letter: A
Number: 7
Symbol: $
Next Letter: B
ASCII value of 'A': 65

Puntos clave a recordar:

  • Utiliza comillas simples '' para los literales de carácter
  • Los caracteres se almacenan como valores numéricos (ASCII)
  • Puedes realizar aritmética con caracteres
  • Cada carácter ocupa 1 byte de memoria

Crear Variables de Cadena Usando std::string

En este paso, aprenderás cómo crear y manipular variables de cadena utilizando la clase std::string en C++. Las cadenas son secuencias de caracteres que te permiten trabajar con texto de manera más sencilla en comparación con las matrices de caracteres.

Abre el WebIDE y crea un nuevo archivo llamado string_variables.cpp en el directorio ~/project:

touch ~/project/string_variables.cpp

Agrega el siguiente código al archivo string_variables.cpp:

#include <iostream>
#include <string>

int main() {
    // Declarando e inicializando variables de cadena
    std::string greeting = "Hello, World!";
    std::string name = "John Doe";
    std::string empty_string;

    // Imprimiendo variables de cadena
    std::cout << "Greeting: " << greeting << std::endl;
    std::cout << "Name: " << name << std::endl;

    // Concatenación de cadenas
    std::string welcome = greeting + " Welcome, " + name;
    std::cout << "Welcome Message: " << welcome << std::endl;

    // Longitud de la cadena
    std::cout << "Greeting length: " << greeting.length() << std::endl;

    // Accediendo a caracteres individuales
    std::cout << "First character of name: " << name[0] << std::endl;

    // Modificando cadenas
    name = "Jane Smith";
    std::cout << "Updated Name: " << name << std::endl;

    return 0;
}

Analicemos las operaciones de cadena:

  1. Declaración:

    • Utiliza #include <string> para acceder a la funcionalidad de cadenas
    • Declara con la palabra clave std::string
    • Puede inicializarse con texto o dejarse vacía
  2. Operaciones de cadena:

    • Concatenación utilizando el operador +
    • Obtener la longitud con el método .length()
    • Acceder a caracteres utilizando el índice []

Compila y ejecuta el programa:

g++ string_variables.cpp -o string_variables
./string_variables

Ejemplo de salida:

Greeting: Hello, World!
Name: John Doe
Welcome Message: Hello, World! Welcome, John Doe
Greeting length: 13
First character of name: J
Updated Name: Jane Smith

Puntos clave a recordar:

  • std::string es más flexible que las matrices de caracteres
  • Las cadenas se pueden modificar y manipular fácilmente
  • Utiliza .length() para obtener el tamaño de la cadena
  • Las cadenas se pueden concatenar con el operador +

Convertir Entre Diferentes Tipos Numéricos Usando el Casting de Tipos

En este paso, aprenderás sobre la conversión de tipos (type casting) en C++, que te permite convertir valores entre diferentes tipos numéricos. La conversión de tipos es esencial cuando necesitas cambiar el tipo de datos de una variable sin perder el valor original.

Abre el WebIDE y crea un nuevo archivo llamado type_casting.cpp en el directorio ~/project:

touch ~/project/type_casting.cpp

Agrega el siguiente código al archivo type_casting.cpp:

#include <iostream>

int main() {
    // Conversión de tipos implícita (conversión automática)
    int intValue = 10;
    double doubleValue = intValue;  // Convierte automáticamente int a double
    std::cout << "Implicit Conversion (int to double): " << doubleValue << std::endl;

    // Conversión de tipos explícita (conversión manual)
    double pi = 3.14159;
    int truncatedPi = (int)pi;  // Conversión estilo C, trunca la parte decimal
    std::cout << "Explicit Conversion (double to int): " << truncatedPi << std::endl;

    // Conversión de tipos con static_cast
    float floatValue = 7.5f;
    int roundedValue = static_cast<int>(floatValue);
    std::cout << "Static Cast (float to int): " << roundedValue << std::endl;

    // Conversión entre tipos numéricos con posible pérdida de datos
    long largeNumber = 1000000;
    short smallNumber = static_cast<short>(largeNumber);
    std::cout << "Large to Small Type Conversion: " << smallNumber << std::endl;

    // Mezclar diferentes tipos numéricos en cálculos
    int a = 5;
    double b = 2.5;
    double result = a + b;  // Conversión implícita de int a double
    std::cout << "Mixed Type Calculation: " << result << std::endl;

    return 0;
}

Analicemos la conversión de tipos:

  1. Conversión implícita:

    • Conversión automática entre tipos compatibles
    • Ocurre sin intervención del programador
    • Generalmente segura cuando se convierte a un tipo más grande
  2. Conversión explícita:

    • Conversión manual de tipos
    • Utiliza static_cast<>() o la sintaxis (type) estilo C
    • Puede causar pérdida de datos o resultados inesperados

Compila y ejecuta el programa:

g++ type_casting.cpp -o type_casting
./type_casting

Ejemplo de salida:

Implicit Conversion (int to double): 10
Explicit Conversion (double to int): 3
Static Cast (float to int): 7
Large to Small Type Conversion: 16960
Mixed Type Calculation: 7.5

Puntos clave a recordar:

  • Ten cuidado al convertir a tipos más pequeños
  • Utiliza static_cast<>() para conversiones más seguras y explícitas
  • Entiende la posible pérdida de datos durante las conversiones
  • Las conversiones implícitas pueden ocurrir automáticamente en cálculos

Definir Constantes Usando la Palabra Clave const

En este paso, aprenderás cómo definir constantes en C++ utilizando la palabra clave const. Las constantes son valores que no se pueden cambiar después de la inicialización, lo que proporciona una forma de crear variables inmutables que protegen los datos de modificaciones no deseadas.

Abre el WebIDE y crea un nuevo archivo llamado constants.cpp en el directorio ~/project:

touch ~/project/constants.cpp

Agrega el siguiente código al archivo constants.cpp:

#include <iostream>

int main() {
    // Definiendo constantes con la palabra clave const
    const int MAX_USERS = 100;
    const double PI = 3.14159;
    const char GRADE_SEPARATOR = '-';

    // Demostrando el uso de constantes
    std::cout << "Maximum Users: " << MAX_USERS << std::endl;
    std::cout << "Value of PI: " << PI << std::endl;
    std::cout << "Grade Separator: " << GRADE_SEPARATOR << std::endl;

    // Convención de nomenclatura: las constantes generalmente usan MAYÚSCULAS
    const int DAYS_IN_WEEK = 7;
    const std::string WELCOME_MESSAGE = "Welcome to C++ Programming!";

    std::cout << "Days in a Week: " << DAYS_IN_WEEK << std::endl;
    std::cout << "Welcome Message: " << WELCOME_MESSAGE << std::endl;

    // Intentar modificar una constante (causará un error de compilación)
    // Descomenta la siguiente línea para ver el error
    // MAX_USERS = 200;  // Esto causaría un error en tiempo de compilación

    return 0;
}

Analicemos las constantes:

  1. Declaración:

    • Utiliza la palabra clave const antes del tipo
    • Debe inicializarse al declararse
    • No se puede modificar después de la inicialización
  2. Mejores prácticas:

    • Utiliza MAYÚSCULAS para los nombres de las constantes
    • Funciona con todos los tipos de datos
    • Ayuda a prevenir modificaciones accidentales

Compila y ejecuta el programa:

g++ constants.cpp -o constants
./constants

Ejemplo de salida:

Maximum Users: 100
Value of PI: 3.14159
Grade Separator: -
Days in a Week: 7
Welcome Message: Welcome to C++ Programming!

Puntos clave a recordar:

  • const crea una variable inmutable
  • Las constantes deben inicializarse al declararse
  • Ayuda a hacer el código más legible y seguro
  • Previene cambios no deseados en valores importantes

Utilizar Variables Booleanas para Condiciones Verdadero/Falso

En este paso, aprenderás sobre las variables booleanas en C++, que representan valores verdaderos o falsos. Las variables booleanas son fundamentales para crear lógica condicional y tomar decisiones en tus programas.

Abre el WebIDE y crea un nuevo archivo llamado boolean_variables.cpp en el directorio ~/project:

touch ~/project/boolean_variables.cpp
#include <iostream>

int main() {
    // Declarando variables booleanas
    bool isStudent = true;
    bool hasPassedExam = false;

    // Imprimiendo valores booleanos
    std::cout << "Is Student: " << std::boolalpha << isStudent << std::endl;
    std::cout << "Passed Exam: " << hasPassedExam << std::endl;

    // Operaciones de comparación que resultan en valores booleanos
    int age = 20;
    bool isAdult = (age >= 18);
    std::cout << "Is Adult: " << isAdult << std::endl;

    // Operaciones lógicas
    bool hasScholarship = true;
    bool canEnroll = isStudent && isAdult;
    std::cout << "Can Enroll: " << canEnroll << std::endl;

    // Negación
    bool isUnemployed =!hasPassedExam;
    std::cout << "Is Unemployed: " << isUnemployed << std::endl;

    // Sentencia condicional utilizando booleanos
    if (isStudent && hasPassedExam) {
        std::cout << "Congratulations! You can proceed to the next level." << std::endl;
    } else {
        std::cout << "You need to improve your academic performance." << std::endl;
    }

    return 0;
}

Analicemos las variables booleanas:

  1. Declaración:

    • Utiliza la palabra clave bool
    • Solo puede ser true o false
    • Útil para la lógica condicional
  2. Operaciones:

    • Los operadores de comparación crean resultados booleanos
    • AND lógico &&
    • OR lógico ||
    • Negación !

Compila y ejecuta el programa:

g++ boolean_variables.cpp -o boolean_variables
./boolean_variables

Ejemplo de salida:

Is Student: true
Passed Exam: false
Is Adult: true
Can Enroll: true
Is Unemployed: true
You need to improve your academic performance.

Puntos clave a recordar:

  • Las variables booleanas representan condiciones verdaderas/falsas
  • Se utilizan en comparaciones y operaciones lógicas
  • Son esenciales para la toma de decisiones en los programas
  • std::boolalpha imprime "true"/"false" en lugar de 1/0

Comprobar el Tamaño de Memoria de Diferentes Tipos de Datos Usando sizeof()

En este paso, aprenderás sobre el operador sizeof() en C++, que te permite determinar el tamaño de memoria de diferentes tipos de datos. Comprender la asignación de memoria es crucial para la programación eficiente y la gestión de memoria.

Abre el WebIDE y crea un nuevo archivo llamado sizeof_operator.cpp en el directorio ~/project:

touch ~/project/sizeof_operator.cpp
#include <iostream>

int main() {
    // Verificando el tamaño de memoria de los tipos enteros
    std::cout << "Integer Types Memory Size:" << std::endl;
    std::cout << "short: " << sizeof(short) << " bytes" << std::endl;
    std::cout << "int: " << sizeof(int) << " bytes" << std::endl;
    std::cout << "long: " << sizeof(long) << " bytes" << std::endl;
    std::cout << "long long: " << sizeof(long long) << " bytes" << std::endl;

    // Verificando el tamaño de memoria de los tipos de punto flotante
    std::cout << "\nFloating-Point Types Memory Size:" << std::endl;
    std::cout << "float: " << sizeof(float) << " bytes" << std::endl;
    std::cout << "double: " << sizeof(double) << " bytes" << std::endl;
    std::cout << "long double: " << sizeof(long double) << " bytes" << std::endl;

    // Verificando el tamaño de memoria de los tipos de carácter y booleano
    std::cout << "\nOther Types Memory Size:" << std::endl;
    std::cout << "char: " << sizeof(char) << " bytes" << std::endl;
    std::cout << "bool: " << sizeof(bool) << " bytes" << std::endl;

    // Verificando el tamaño de memoria de variables específicas
    int intVar = 42;
    double doubleVar = 3.14;
    char charVar = 'A';

    std::cout << "\nVariable Memory Size:" << std::endl;
    std::cout << "intVar: " << sizeof(intVar) << " bytes" << std::endl;
    std::cout << "doubleVar: " << sizeof(doubleVar) << " bytes" << std::endl;
    std::cout << "charVar: " << sizeof(charVar) << " bytes" << std::endl;

    return 0;
}

Analicemos el operador sizeof():

  1. Propósito:

    • Determina el tamaño de memoria de los tipos de datos
    • Devuelve el tamaño en bytes
    • Es útil para comprender la asignación de memoria
  2. Uso:

    • Puede utilizarse con tipos de datos
    • Puede utilizarse con variables
    • Ayuda a comprender los requisitos de memoria

Compila y ejecuta el programa:

g++ sizeof_operator.cpp -o sizeof_operator
./sizeof_operator

Ejemplo de salida:

Integer Types Memory Size:
short: 2 bytes
int: 4 bytes
long: 8 bytes
long long: 8 bytes

Floating-Point Types Memory Size:
float: 4 bytes
double: 8 bytes
long double: 16 bytes

Other Types Memory Size:
char: 1 bytes
bool: 1 bytes

Variable Memory Size:
intVar: 4 bytes
doubleVar: 8 bytes
charVar: 1 bytes

Puntos clave a recordar:

  • sizeof() devuelve el tamaño de memoria en bytes
  • Los tamaños de memoria pueden variar entre sistemas
  • Ayuda a comprender los requisitos de memoria de los tipos de datos
  • Es útil para la gestión de memoria de bajo nivel

Manejar Situaciones de Desbordamiento de Enteros

En este paso, aprenderás sobre el desbordamiento de enteros (integer overflow), una situación que ocurre cuando un cálculo produce un valor que supera el límite máximo de un tipo entero. Comprender y prevenir el desbordamiento es crucial para escribir programas en C++ robustos y confiables.

Abre el WebIDE y crea un nuevo archivo llamado integer_overflow.cpp en el directorio ~/project:

touch ~/project/integer_overflow.cpp
#include <iostream>
#include <limits>

int main() {
    // Demostrando el desbordamiento de enteros con un short int
    short smallInt = 32767;  // Valor máximo para short
    std::cout << "Original Value: " << smallInt << std::endl;

    // El desbordamiento ocurre cuando se incrementa más allá del máximo
    smallInt++;
    std::cout << "After Overflow: " << smallInt << std::endl;

    // Usando enteros sin signo para prevenir desbordamiento negativo
    unsigned int positiveOnly = 0;
    std::cout << "Unsigned Integer Start: " << positiveOnly << std::endl;

    // Decrementar un entero sin signo causa un rebote (wrap-around)
    positiveOnly--;
    std::cout << "Unsigned Integer Wrap-around: " << positiveOnly << std::endl;

    // Verificando los límites de los enteros
    std::cout << "\nInteger Type Limits:" << std::endl;
    std::cout << "Short Max: " << std::numeric_limits<short>::max() << std::endl;
    std::cout << "Short Min: " << std::numeric_limits<short>::min() << std::endl;

    // Método de incremento seguro
    try {
        if (smallInt < std::numeric_limits<short>::max()) {
            smallInt++;
            std::cout << "Safe Increment: " << smallInt << std::endl;
        } else {
            std::cout << "Cannot increment further" << std::endl;
        }
    } catch (const std::overflow_error& e) {
        std::cout << "Overflow Error: " << e.what() << std::endl;
    }

    return 0;
}

Analicemos el desbordamiento de enteros:

  1. Características del desbordamiento:

    • Ocurre cuando un valor supera el límite máximo del tipo
    • Puede causar resultados inesperados
    • Comportamiento diferente para tipos con signo y sin signo
  2. Estrategias de prevención:

    • Verificar los límites antes de realizar cálculos
    • Utilizar tipos enteros más grandes
    • Utilizar tipos sin signo para valores no negativos
    • Implementar comprobaciones de rango

Compila y ejecuta el programa:

g++ integer_overflow.cpp -o integer_overflow
./integer_overflow

Ejemplo de salida:

Original Value: 32767
After Overflow: -32768
Unsigned Integer Start: 0
Unsigned Integer Wrap-around: 4294967295

Integer Type Limits:
Short Max: 32767
Short Min: -32768
Safe Increment: -32767

Puntos clave a recordar:

  • El desbordamiento de enteros puede llevar a resultados inesperados
  • Diferentes tipos tienen diferentes comportamientos de desbordamiento
  • Siempre verifica los rangos de valores antes de realizar cálculos
  • Utiliza los tipos de datos adecuados para tus cálculos

Resumen

En este laboratorio, aprendiste sobre diferentes tipos de datos en C++ y cómo trabajar con ellos. Comenzaste declarando variables enteras de diferentes tamaños, incluyendo short, int y long, y exploraste sus respectivos rangos. A continuación, inicializaste variables de punto flotante, como float y double, con puntos decimales. También aprendiste cómo declarar e inicializar variables de carácter utilizando comillas simples, así como crear variables de cadena utilizando la clase std::string. Además, exploraste la conversión de tipos (type casting) para convertir entre diferentes tipos numéricos, definiste constantes utilizando la palabra clave const y trabajaste con variables booleanas para condiciones verdaderas/falsas. Finalmente, utilizaste el operador sizeof() para verificar el tamaño de memoria de varios tipos de datos y manejaste situaciones de desbordamiento de enteros (integer overflow).