Einführung
Zahlensysteme sind Methoden, um Zahlen mit unterschiedlichen Symbolen und mathematischen Operationen darzustellen. Das Konvertieren zwischen verschiedenen Zahlensystemen ist eine häufige Aufgabe in der Programmierung. In diesem Lab werden wir Programme vorstellen, die Zahlen von einem System in ein anderes umwandeln können. Wir werden behandeln:
- Binär-zu-Dekimal-Konvertierung
- Oktal-zu-Dekimal-Konvertierung
- Dekimal-zu-Binär-Konvertierung (ohne Rekursion)
- Dekimal-zu-Binär-Konvertierung (mit Rekursion)
Hinweis: Sie müssen die Datei
~/project/main.cselbst erstellen, um zu üben, wie man codiert und wie man sie mit gcc kompiliert und ausführt.
cd ~/project
## main.c erstellen
touch main.c
## main.c kompilieren
gcc main.c -o main
## main ausführen
./main
Binär-zu-Dekimal-Konvertierung
Das Binärsystem ist ein Zahlensystem, das nur zwei Ziffern, 0 und 1, verwendet. Das Dezimalsystem ist ein Zahlensystem, das zehn Ziffern, von 0 bis 9, verwendet. Hier ist das C-Programm, das eine binäre Zahl in ihre dekadische Entsprechung umwandelt:
#include<stdio.h>
#include<math.h>
// Funktionsprototypdeklaration
int binary_decimal(int n);
int main()
{
printf("\n\n\t\tLabEx - Best place to learn\n\n\n");
int n;
char c;
printf("Geben Sie die binäre Zahl ein: ");
scanf("%d", &n);
printf("\n\n\nDie dekadische Entsprechung von %d ist %d\n\n", n, binary_decimal(n)); // Funktionsaufruf
printf("\n\n\t\t\tCoding ist Spaß!\n\n\n");
return 0;
}
// Definition der Funktion zur Umwandlung von Binär in Dezimal.
int binary_decimal(int n)
{
int decimal = 0, i = 0, rem;
while(n!= 0)
{
rem = n%10; // gibt die Ziffer an der Einerstelle
n = n/10; // gibt die Zahl ohne ihre Einerziffer
/*
pow ist eine systemdefinierte Funktion, die
zwei Integer als Eingabeparameter nimmt
*/
decimal += rem*pow(2, i++);
}
/*
gibt die dekadische Entsprechung der eingegebenen
binären Zahl an den Funktionsaufruf zurück
*/
return decimal;
}
Oktal-zu-Dekimal-Konvertierung
Das Oktalsystem ist ein Zahlensystem, das acht Ziffern, von 0 bis 7, verwendet. Hier ist das C-Programm, das eine oktale Zahl in ihre dekadische Entsprechung umwandelt:
#include<stdio.h>
#include<math.h>
int main()
{
printf("\n\n\t\tLabEx - Best place to learn\n\n\n");
long int octal, val, decimal = 0;
int i = 0;
printf("Geben Sie eine beliebige oktale Zahl ein: ");
scanf("%ld", &val);
octal = val;
while(octal!= 0)
{
/*
i++ ist Postinkrement, wobei der Wert
zuerst zugewiesen und dann inkrementiert wird
*/
decimal += (octal % 10)*pow(8, i++);
octal/=10; // gleichbedeutend mit octal=octal/10
}
printf("\n\n\nDie äquivalente dekadische Zahl von %ld ist %ld\n\n\n", val, decimal);
printf("\n\n\t\t\tCoding ist Spaß!\n\n\n");
return 0;
}
Dekimal-zu-Binär-Konvertierung (ohne Rekursion)
Hier ist das C-Programm, das eine Dezimalzahl in ihre binäre Entsprechung ohne Rekursion umwandelt:
#include<stdio.h>
int main()
{
printf("\n\n\t\tLabEx - Best place to learn\n\n\n");
int n,c,k;
printf("Geben Sie eine ganze Zahl im Dezimalsystem ein: ");
scanf("%d", &n);
// Im 31-Bit-Format
printf("\n\n\nDie binäre Entsprechung der Dezimalzahl %d ist:", n);
for(c = 31; c >= 0; c--)
{
k = n>>c;
/*
num&1 = gibt true zurück, wenn die letzte Ziffer von num 1 ist
andernfalls false
*/
if(k&1)
printf("1");
else
printf("0");
}
printf("\n");
printf("\n\n\t\t\tCoding ist Spaß!\n\n\n");
return 0;
}
Dekimal-zu-Binär-Konvertierung (mit Rekursion)
Hier ist das C-Programm, das eine Dezimalzahl in ihre binäre Entsprechung mit Rekursion umwandelt:
#include<stdio.h>
//Funktionsprototypdeklarationen
void decimal_binary(int );
void F(int );
void reverse(int );
int main()
{
printf("\n\n\t\tLabEx - Best place to learn\n\n\n");
int n;
printf("\n\nGeben Sie eine ganze Zahl im Dezimalsystem ein: ");
scanf("%d", &n);
//Im 31-Bit-Format
printf("\n\nDie binäre Entsprechung der Dezimalzahl %d mit der decimal_binary-Methode ist: ", n);
decimal_binary(n); // Funktionsaufruf
printf("\n\nDie binäre Entsprechung der Dezimalzahl %d mit der F()-Methode ist: ", n);
F(n); // Funktionsaufruf
printf("\n\nDie Umkehrung der binären Darstellung des Werts %d ist: ", n);
reverse(n); // Funktionsaufruf
printf("\n\n\t\t\tCoding ist Spaß!\n\n\n");
return 0;
}
// Funktionsdefinition
void decimal_binary(int i)
{
if(i <= 1)
printf("%d", i); // um in aufwärts-downwärts-Format auszugeben
else
{
decimal_binary(i/2);
printf("%d", i%2);
}
}
void F(int j)
{
if(j/2)
{
F(j/2);
}
printf("%d", j%2);
}
void reverse(int k)
{
if(k <= 1)
printf("%d", k);
else
{
printf("%d", k%2);
F(k/2);
}
printf("\n\n");
}
Zusammenfassung
In diesem Lab haben wir Programme gezeigt, die Zahlen zwischen verschiedenen Zahlensystemen umwandeln können. Wir haben die Binär-zu-Dekimal-Konvertierung, die Oktal-zu-Dekimal-Konvertierung und die Dekimal-zu-Binär-Konvertierung (mit und ohne Rekursion) behandelt. Wir hoffen, dass Ihnen dieses Lab geholfen hat, zu verstehen, wie man Zahlen zwischen verschiedenen Zahlensystemen in der C-Programmierung umwandelt.



