💻 Exemplos de Código: Cap 04 - Expressões, Operadores e Bitwise
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;
}