====== Dezimalzahl als Dualzahl ausgeben ======
===== C =====
==== Lösung mit UND-Operator ====
#include
int main ()
{
int zahl;
printf ("Bitte eine Zahl eingeben: \n");
scanf("%d", &zahl);
int bin=1<<((sizeof(int)*8)-2);
for (int i=0; i<(sizeof(int)*8) && bin>0; i++)
{
if ((zahl & bin)!=0)
printf ("1");
else printf ("0");
bin=bin>>1;
}
printf("\n");
return 0;
}
==== Lösung mittels Modulo ====
Hier ist dec2bin eine rekursive Funktion. Bei der Modulo-Rechnung erhalten wir immer die letzte Stelle, wir wollen aber mit der ersten Stelle anfangen. Also teilen wir zuerst die Zahl bis sie 0 ist, erst dann fangen wir an die letzten Stellen aller Aufrufe nacheinander auszugeben. Dh. wir steigen erst rekursiv bis zur ersten Stelle ab, dann geben wir die Stellen beim rekursiven Aufstieg aus.
#include
void dec2bin(int num)
{
if (num>0)
{
dec2bin(num/2);
printf ("%d", num%2);
}
}
int main ()
{
int num=0;
printf("Zahl eingeben: ");
scanf("%d", &num);
dec2bin(num);
return 0;
}
===== Fortran =====
PROGRAM main
integer :: zahl = 0;
write (*,"(A,$)") "Bitte eine Zahl eingeben: "
read (*,*) zahl
call dec2bin_mod ( zahl )
write (*,*) " "
END PROGRAM
recursive SUBROUTINE dec2bin_mod ( zahl )
integer zahl
integer tmp
if (zahl > 0) then
tmp = mod(zahl, 2)
call dec2bin_mod ( zahl / 2 )
write (*,"(I1,$)") tmp
endif
END SUBROUTINE
===== Haskell =====
dec2bin :: Int -> IO()
dec2bin zahl
| zahl > 0 = do dec2bin ( zahl `div` 2 )
putStrLn ( show ( zahl `mod` 2 ))
| otherwise = return ()
===== Rust =====
fn dec2bin ( i: i32, f: bool ) {
if f {
print!("0b")
}
if i > 0 {
dec2bin ( i/2, false );
if i % 2 == 0 {
print! ("0");
} else {
print! ("1");
}
}
}
fn main() {
let input: i32 = 42;
print!("{} in decimal: ", input);
dec2bin ( input, true );
}