C/C++-Übungen für Einsteiger

Dezimalzahlen in Binärzahlen umwandeln in C und C++

In dieser Lektion wandelst du eine positive ganze Zahl durch fortlaufendes Teilen durch 2 vom Dezimal- ins Binärsystem um.

Einführung

Um eine Zahl ins Binärsystem umzuwandeln, teilt man sie immer wieder durch 2 und notiert jedes Mal den Rest. Die Reste sind die Binärziffern, allerdings in der Reihenfolge von der letzten Ziffer (der niedrigsten Stelle) zur ersten.

Wichtige Punkte

  • Schalte die Compiler-Warnungen (compiler warnings) ein und behebe alle.
  • Verstehe den Datentyp und die Lebensdauer (lifetime) jedes Werts genau.
  • Prüfe immer die Eingabedaten und die Grenzen von Array-Indizes.

Codebeispiele in C und C++

C
Code ausführen →
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("");
}
Ergebnis der Ausführung
13 = 1101
C++
Code ausführen →
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';
}
Ergebnis der Ausführung
13 = 1101

C und C++ im Vergleich

Die do-while-Schleife speichert den Rest value % 2 im Array bits und teilt value durch 2, bis value gleich 0 ist. do-while sorgt dafür, dass auch die Zahl 0 mindestens eine Ziffer bekommt. Da die Divisionen die letzte Ziffer zuerst liefern, gibt das Programm das Array bits rückwärts aus, deshalb wird 13 als 1101 ausgegeben.

C

C verwendet kleine prozedurale Funktionen und zeigt offen, wie Daten im Speicher dargestellt werden.

C++

C++ erlaubt weiterhin Arbeit auf niedriger Ebene, ergänzt aber Bibliothekstypen und sicherere Abstraktionen.

Übungen zur Vertiefung

Führe beide Versionen aus und ändere dann den Code, um zu beobachten, welche Sicherheit jede Sprache bietet.

  • Teste ungültige Eingaben und Grenzwerte.
  • Kompiliere mit den Flags -Wall -Wextra -Wpedantic, um zusätzliche Warnungen einzuschalten.
  • Lagere gemeinsame Deklarationen in eine Header-Datei und die Implementierung in eine eigene Datei aus.

Mit einer Challenge üben

Nutze den Inhalt dieser Lektion, um ein echtes Problem zu lösen. Jede Challenge läuft im Browser, mit sofortigen Tests und einem KI-Review.

Alle Challenges