Esercizi C/C++ per principianti

Convertire un numero decimale in binario in C e C++

In questa lezione convertirai un intero positivo da decimale a binario con divisioni successive per 2.

Introduzione

Per convertire un numero in binario, lo dividiamo per 2 più volte e annotiamo il resto di ogni divisione. I resti sono le cifre binarie, ma si ottengono nell'ordine dall'ultima cifra (la meno significativa) alla prima.

Punti importanti

  • Attiva gli avvisi del compilatore (compiler warning) e correggili tutti.
  • Comprendi bene il tipo di dato e la durata (lifetime) di ogni valore.
  • Controlla sempre i dati in ingresso e i limiti degli indici degli array.

Esempi di codice C e C++

C
Esegui →
main.c
#include <stdio.h>
int main(void) {
    unsigned number = 13, value = number; int bits[32], count = 0;
    // Store remainders generated from right to left.
    do { bits[count++] = value % 2; value /= 2; } while (value);
    printf("%u = ", number); while (count) printf("%d", bits[--count]); puts("");
}
Risultato dell'esecuzione
13 = 1101
C++
Esegui →
main.cpp
#include <bitset>
#include <iostream>
#include <string>
int main() {
    unsigned number = 13;
    // Remove leading zeroes from a fixed-width bitset string.
    std::string bits = std::bitset<32>(number).to_string();
    bits.erase(0, bits.find_first_not_of('0'));
    std::cout << number << " = " << bits << '\n';
}
Risultato dell'esecuzione
13 = 1101

Confronto tra C e C++

Il ciclo do-while salva il resto value % 2 nell'array bits e divide value per 2, finché value non arriva a 0. Il do-while garantisce che anche il numero 0 abbia almeno una cifra. Dato che le divisioni trovano per prima l'ultima cifra, il programma stampa l'array bits in ordine inverso, quindi 13 diventa 1101.

C

C usa piccole funzioni procedurali e mostra apertamente come i dati sono rappresentati in memoria.

C++

C++ continua a permettere il lavoro a basso livello, ma aggiunge tipi di libreria e astrazioni più sicure.

Esercizi di approfondimento

Esegui entrambe le versioni e poi modifica il codice per osservare la differenza di sicurezza che offre ciascun linguaggio.

  • Prova input non validi e valori ai limiti.
  • Compila con i flag -Wall -Wextra -Wpedantic per attivare più avvisi.
  • Sposta le dichiarazioni condivise in un file header e l'implementazione in un altro file.

Esercitati con una sfida

Usa ciò che questa lezione spiega per risolvere un problema reale. Ogni sfida gira nel browser, con test immediati e una revisione dell'IA.

Tutte le sfide