Spec Sistemas Com Cpp • Trilha Progressiva em 4 Níveis


🎯 Nível 1: Fundamentos

Problema 18.1 — Operações Bitwise (&, |, ^, ~, «, ») e Máscaras de Bits

Contexto: Operações Bitwise (&, , ^, ~, «, ») e Máscaras de Bits no contexto de Programação de Baixo Nível, Bitwise e Alinhamento.

Requisitos de Execução:

  1. Ativar, desativar e verificar bits específicos de um registrador de 8 bits.

Resultado Esperado

Máscaras binárias manipuladas com sucesso.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_18_1_SeuNome
  2. Envie na tarefa: Atividade Cap 18 - Programação de Baixo Nível, Bitwise e Alinhamento
🔑 Gabarito de Código & Solução Comentada
#include <iostream>
#include <cstdint>

int main() {
    uint8_t flags = 0b00000000;
    flags |= (1 << 2); // Ativa bit 2
    flags |= (1 << 5); // Ativa bit 5
    std::cout << "Flag 2 ativa: " << ((flags & (1 << 2)) ? "SIM" : "NAO") << std::endl;
    std::cout << "Valor final: 0x" << std::hex << (int)flags << std::endl;
    return 0;
}

🔍 Nível 2: Prática

Problema 18.2 — Operações com a Biblioteca do C++20 (std::popcount, std::has_single_bit)

Contexto: Operações com a Biblioteca do C++20 (std::popcount, std::has_single_bit) no contexto de Programação de Baixo Nível, Bitwise e Alinhamento.

Requisitos de Execução:

  1. Contar bits ativos com std::popcount e testar potência de 2 com std::has_single_bit.

Resultado Esperado

Funções intrínsecas de CPU (POPCNT) executadas via `<bit>`.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_18_2_SeuNome
  2. Envie na tarefa: Atividade Cap 18 - Programação de Baixo Nível, Bitwise e Alinhamento
🔑 Gabarito de Código & Solução Comentada
#include <iostream>
#include <bit>

int main() {
    unsigned int val = 0b10110010;
    std::cout << "Bits ativos (popcount): " << std::popcount(val) << std::endl;
    std::cout << "Eh potencia de 2: " << (std::has_single_bit(16u) ? "SIM" : "NAO") << std::endl;
    return 0;
}

⚡ Nível 3: Integração

Problema 18.3 — Conversão Segura de Tipos sem Violação de Strict Aliasing com std::bit_cast

Contexto: Conversão Segura de Tipos sem Violação de Strict Aliasing com std::bit_cast no contexto de Programação de Baixo Nível, Bitwise e Alinhamento.

Requisitos de Execução:

  1. Converter representação binária de float para uint32_t com std::bit_cast<uint32_t>(f).

Resultado Esperado

Conversão em tempo de compilação sem UB (Undefined Behavior).

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_18_3_SeuNome
  2. Envie na tarefa: Atividade Cap 18 - Programação de Baixo Nível, Bitwise e Alinhamento
🔑 Gabarito de Código & Solução Comentada
#include <iostream>
#include <bit>
#include <cstdint>

int main() {
    float f{1.0f};
    auto bits = std::bit_cast<uint32_t>(f);
    std::cout << "std::bit_cast float 1.0f: 0x" << std::hex << bits << std::endl;
    return 0;
}

🏆 Nível 4: Desafio Corporativo

Problema 18.4 — Alinhamento de Memória Controlado com alignas e alignof

Contexto: Alinhamento de Memória Controlado com alignas e alignof no contexto de Programação de Baixo Nível, Bitwise e Alinhamento.

Requisitos de Execução:

  1. Alinhar buffer estrito para limites de 64 bytes para instruções vetoriais SIMD (AVX-512).

Resultado Esperado

Estrutura alinhada em 64 bytes para processamento vetorial sem cache splits.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_18_4_SeuNome
  2. Envie na tarefa: Atividade Cap 18 - Programação de Baixo Nível, Bitwise e Alinhamento
🔑 Gabarito de Código & Solução Comentada
#include <iostream>

struct alignas(64) BlocoSIMD {
    float dados[16];
};

int main() {
    std::cout << "Alinhamento da struct: " << alignof(BlocoSIMD) << " bytes\n";
    std::cout << "Tamanho: " << sizeof(BlocoSIMD) << " bytes\n";
    return 0;
}