Umformung der Dezimalzahlen in Binärzahlen

john_typhoon_85

Grünschnabel
Hallo,

hab mich in diesem tutorium neu registriert und bin allerdings ein c und c++ anfänger.
Einiges ist mir sehr unklar und deswegen wollte ich fragen ob mir jemand in bezug auf bit-operatoren helfen kann.
Ich weiss zwar was diese operatoren wie zb.: &, |, <<..... machen aber sobald ich mir ein paar kleine c-programme darüber betrachte, versteh ich die verbindung und den zweck dieser operatoren nicht.

Hier zeige ich eine unserer aufgaben-programme und hätte da ein paar fragen über die unklarheiten. In diesem einfachen programm ist das ziel eine dezimalzahl, die was von benutzer eingegeben wird in eine binärzahl umzuformen und auszugeben. Die Fragen stelle ich neben den einzelnen codes.


#include<stdio.h>


int main()
{

int enter;
int number;
int mask;

printf("Please enter an integer:");
scanf("%d", &enter);

mask=0x80000000; //Ist diese Zahl die gleiche wie diese binärzahl
//10000000-00000000-00000000-00000000 ?

for(number=32; number>=1; number--)
{

if(mask&enter) //was ist der zweck dahinter?
{
printf("%c", '1');
}
else
{
printf("%c", '0');
}
enter<<=1; //warum setzt man hier einen bitshifting operator nach
//links

if(number==25 || number==17 || number==9)
{
printf("%c",'-');
}
}
printf("\n");
return 0;
}

Bin dankbar für eure Antworten.
Lg
 
Hallo,

bitte achte in Zukunft darauf das du die Umschalttaste beim Schreiben benutzt, denn wenn man das liest bekommt man Augenkrebs... (siehe auch http://www.tutorials.de/index.php?pg=netiquette).
Desweiteren, wenn du Code hier im Forum posten möchtest gibt es für jede Sprache sogenannte "Codetags". Wenn du deinen Code darin einbettest wird die Syntax farbig dargestellt und die Einrückung ist auch so wie sie sein sollte. Für C ist dies bspw. [ c][ /c], ohne Leerzeichen.

Zu deinem eigtl. Problem:

1.) ja
2.) "mask&enter" blendet alle unteren 31 Bits deiner eingegeben Zahl aus (maskiert sie mit 0) und überprüft gleichzeitig ob das 32. Bit gesetzt ist. Ist dieses Bit nämlich 1 gibt "mask&enter" 0x80000000 zurück und dieser Ausdruck wird in C zu true ausgewertet. Andernfalls (das oberste Bit ist 0) gibt der Operator 0x00000000 zurück und dieser Ausdruck wird in C zu false ausgewertet.
3.) Im nächsten Schritt soll dann nat. das nächst kleinerwertige Bit überprüft werden. Um die Maske zur Überprüfung wiederum anwenden zu können musst du das nächst kleinerwertige Bit an die höchste Stelle verschieben, deshalb der Shift nach Links. Die niederwertigste Stelle wird dann mit 0 aufgefüllt.
4.) Um alle Bitstellen deiner Zahl zu überprüfen muss dieser Vorgang dann noch 31 mal wiederholt werden.

Gruß,
RedWing
 
Zurück