Código executável completo demonstrando operadores aritméticos, incremento pré/pós, curto-circuito lógico e manipulação avançada de registradores com operadores bitwise.


📄 Exemplo 1: Operadores Aritméticos e Avaliação Lógica (aritmetica_logica.c)

#include <stdio.h>
#include <stdbool.h>

int main(void) {
    int a = 10;
    int b = 3;

    printf("=== OPERADORES ARITMETICOS ===\n");
    printf("Soma:           %d + %d = %d\n", a, b, a + b);
    printf("Subtracao:      %d - %d = %d\n", a, b, a - b);
    printf("Multiplicacao:  %d * %d = %d\n", a, b, a * b);
    printf("Divisao Real:   %d / %d = %.2lf\n", a, b, (double)a / b);
    printf("Modulo (Resto): %d %% %d = %d\n", a, b, a % b);

    printf("\n=== INCREMENTO PRE E POS-FIXADO ===\n");
    int x = 5;
    printf("Valor inicial:     x = %d\n", x);
    printf("Usando pos (x++):  %d (x virou %d logo apos)\n", x++, x);
    printf("Usando pre (++x):  %d (incrementado antes)\n", ++x);

    printf("\n=== AVALIACAO POR CURTO-CIRCUITO ===\n");
    int divisor = 0;
    // O teste (divisor != 0) impede a divisão por zero no segundo teste
    if (divisor != 0 && (100 / divisor) > 10) {
        printf("Condicao atingida!\n");
    } else {
        printf("Divisao por zero evitada com sucesso pelo curto-circuito!\n");
    }

    return 0;
}

📄 Exemplo 2: Manipulação de Máscaras de Bits em Registradores (bitwise_flags.c)

#include <stdio.h>
#include <stdint.h>

// Definicao de Flags de Hardware
#define FLAG_ALIMENTACAO   (1U << 0) // Bit 0 (0b00000001)
#define FLAG_CONECTADO     (1U << 1) // Bit 1 (0b00000010)
#define FLAG_TRANSMITINDO  (1U << 2) // Bit 2 (0b00000100)
#define FLAG_ERRO_CRITICO  (1U << 3) // Bit 3 (0b00001000)

int main(void) {
    uint8_t registradorStatus = 0;

    printf("Estado Inicial: 0x%02X\n", registradorStatus);

    // 1. Ativar Alimentacao e Conectado (OR |)
    registradorStatus |= (FLAG_ALIMENTACAO | FLAG_CONECTADO);
    printf("Apos ligar e conectar: 0x%02X\n", registradorStatus);

    // 2. Testar se esta transmitindo (AND &)
    if (registradorStatus & FLAG_TRANSMITINDO) {
        printf("Status: Transmitindo dados...\n");
    } else {
        printf("Status: Canal ocioso (nao esta transmitindo).\n");
    }

    // 3. Ativar transmissao
    registradorStatus |= FLAG_TRANSMITINDO;
    printf("Apos iniciar transmissao: 0x%02X\n", registradorStatus);

    // 4. Desativar transmissao (AND com NOT ~)
    registradorStatus &= ~FLAG_TRANSMITINDO;
    printf("Apos finalizar transmissao: 0x%02X\n", registradorStatus);

    // 5. Inverter flag de erro com XOR (^)
    registradorStatus ^= FLAG_ERRO_CRITICO;
    printf("Apos disparar erro (XOR): 0x%02X\n", registradorStatus);

    return 0;
}