Gestión de Tipos de Datos, Flujos de Entrada/Salida y Constantes en C++

Comentarois en el Código

En C++, la documentación interna se maneja mediante comentarios. Estos son ignorados por el compilador y sirven para explicar la lógica del programa:

  • //: Comentario de una sola línea.
  • /* ... */: Comentario de múltiples líneas o bloque.

Representación de Números Negativos y Tipos Numéricos

Los tipos de datos enteros pueden ser con signo (signed) o sin signo (unsigned). Cuando se utiliza el modificador unsigned, el rango de la variable se desplaza para cubrir solo valores positivos, duplicando su capacidad máxima.

#include <iostream>

int main() {
    // Un valor negativo asignado a un unsigned provoca un wrap-around (desbordamiento)
    unsigned int valorPositivo = -10; 
    int numeroEstandar = 25;

    std::cout << "Entero estándar: " << numeroEstandar << std::endl;
    std::cout << "Valor unsigned tras desbordamiento: " << valorPositivo << std::endl;

    return 0;
}

A nivel binario, los números negativos se representan mediante el sistema de complemento a dos. El bit más significativo (MSB) actúa como indicador de signo: 0 para positivos y 1 para negativos.

Cálculo del Complemento a Dos

Para obtener la representación de un número negativo (ej. -5):

  1. Magnitud binaria: 00000101 (5 en binario).
  2. Complemento a uno (invertir bits): 11111010.
  3. Complemento a dos (sumar 1 al bit menos significativo): 11111011.

Conversión de Tipos (Casting)

Es posible forzar la conversión de un tipo de dato a otro. Por ejemplo, truncar un número de punto flotante a un entero:

double pi = 3.14159;
int piEntero = int(pi); // Resultado: 3

Manpiulación de Cadenas de Texto

C++ ofrece diversas formas de manejar texto, desde caracteres individuales hasta objetos de cadena complejos:

#include <iostream>
#include <string>

int main() {
    char letra = 'A';                      // Carácter simple
    const char* literal = "Texto fijo";    // Puntero a cadena (estilo C)
    char buffer[10] = "Hola";              // Arreglo de caracteres
    std::string cadenaModerna = "C++17";   // Objeto de la biblioteca estándar

    std::cout << letra << " " << literal << " " << cadenaModerna << std::endl;
    return 0;
}

Es fundamental recordar que las cadenas de caracteres clásicas (estilo C) finalizan siempre con el carácter nulo \0.

Flujos de Entrada y Salida (I/O)

Uso de cin y cout

La biblioteca <iostream> permite interactuar con la consola de forma sencilla.

#include <iostream>
using namespace std;

int main() {
    int edad;
    cout << "Ingrese su edad: ";
    cin >> edad;
    cout << "Su edad es: " << edad << endl;
    
    // Suma directa en el flujo de salida
    cout << "El próximo año tendrá: " << edad + 1 << endl;
    return 0;
}

Formateo con iomanip

Para presentaciones de datos tabulares o bases numéricas específicas, se utilizan manipuladores:

  • hex: Cambia la base a hexadecimal.
  • setw(n): Define el ancho del campo.
  • setfill(c): Rellena los espacios vacíos con un carácter específico.
#include <iostream>
#include <iomanip>

int main() {
    int codigo = 255;
    cout << "Hexadecimal: " << std::hex << codigo << std::endl;
    
    int unidades = 42;
    // Ancho de 8 espacios, rellenando con '#'
    std::cout << std::setw(8) << std::setfill('#') << unidades << std::endl;
    
    return 0;
}

Entrada y Salida Formateada (C-Style)

Las funciones printf y scanf de la biblioteca <cstdio> ofrecen un control granular mediante especificadores de formato:

  • %d: Enteros.
  • %f: Punto flotante (float).
  • %lf: Double.
  • %s: Cadenas de caracteres.
  • %4.2f: Define 4 espacios de ancho total y 2 decimales.
#include <cstdio>

int main() {
    int val1, val2;
    // Lectura de valores separados por coma
    scanf("%d,%d", &val1, &val2);
    printf("Valores alineados: %5d | %5d\n", val1, val2);
    return 0;
}

Definición de Constantes

Las constantes se declaran con la palabra clave const. Una vez inicializadas, su valor no puede ser modificado durante la ejecución. Por convención, se suelen nombrar en mayúsculas.

const double TASA_IVA = 0.21;
const int MAX_USUARIOS = 100;

Los literales también pueden llevar sufijos para especificar su tipo exacto:

  • L: Long (ej. 100L).
  • U: Unsigned (ej. 50U).
  • 0x: Prefijo para hexadecimal (ej. 0x1A).
  • 0: Prefijo para octal (ej. 075).

Etiquetas: cpp iostream iomanip DataTypes binary-representation

Publicado el 10-4 19:07