[C] Dezimalzahl in Binärdarstellung mit Bitshift operationen
-
--------------------------------------------------------------------------------
Hallo,
für mich is das alles absolutes Neuland und würd mich über jede Hilfe freuen.
Ich möchte ein Programm schreiben, dass die Binärpräsentation eines Integers ausgeben soll. Die einzelnen Bytes sollen mit "|" getrennt werden und der Integer soll vorher eingelesen werden.
Vielleicht könnt ihr mir ein paar Lösungsvorschläge geben.für int =0 sollte es dann so ausschaun
00000000|00000000|00000000|00000000Thx für eure hilfe...
-
mit folgender Zeile prüfst du, ob ein bestimmtes Bit gesetzt ist:
int a = 5; int bit = 15; if (a & (1 << bit)) { ... }
Ein int ist
sizeof(int)*8
Bit langwie man Zahlen einliest sollen dir die C-ler hier verraten, ich rühr das nicht an
mit
if(zahl % andereZahl == 0)
prüfst du, ob eine Zahl durch eine andere teilbar istdas sollte soweit alles sein, dass du wissen musst
-
doppelpost oder wie?
--> http://www.c-plusplus.net/forum/viewtopic-var-t-is-252348.html
-
Ja erwischt
Hab ne andere Variante um von Dezimal auf binär umzurechnen. Mein Problem is aber, dass ich nicht weiss wie ich alle bytes mit | voneinander trennen soll. Habs mit ner for schleife probiert klappt aber milde gesagt nicht so ganz. Ich hoffe du kannst mir helfen...
Jede 8. Stelle soll durch | getrennt sein.#include <stdio.h>
int main()
{
unsigned int value,i,bin[32];
printf("Please enter an integer:");
scanf("%d",&value);
int j;
for(i=0;i<32;i++)
{
bin[i]=((value>>i)&1);
}
//Schleife für umgekehrte Ausgabe
for(i=0;i<32;i++)
{
for (j=8;j<32;j++)
{
if ( j = (j+8))
{
printf ("|");
}
}
printf("%d",bin[31-i]);
}
printf("\n");
return 0;
}
-
Benutze bitte in Zukunft cpp-Tags (links unter den Smileys), dann ist dein Code auch lesbar:
#include <stdio.h> int main() { unsigned int value,i,bin[32]; printf("Please enter an integer:"); scanf("%d",&value); int j; for(i=0;i<32;i++) { bin[i]=((value>>i)&1); } //Schleife für umgekehrte Ausgabe for(i=0;i<32;i++) { for (j=8;j<32;j++) { if ( j = (j+8)) { printf ("|"); } } printf("%d",bin[31-i]); } printf("\n"); return 0; }
-
Das hier
for (j=8;j<32;j++) { if ( j = (j+8)) { printf ("|"); } }
nimmst du mal komplett raus (macht gar keinen Sinn, sorry
), und packst dafür das hier
if(i && !(i%8)) { printf("|"); }
über deine printf-Ausgabe. Sollte passen.
-
if ( j = (j+8))
Meckert bei sowas dein Compiler nicht zumindest ein bischen?
Du hast da nämlich keinen Vergleich (==), was es vermutlich sein sollte, sondern eine Zuweisung (=). Was grundsätzlich erlaubt ist, aber so gut wie nie erwünscht, da das Ergebnis (so gut wie?) immer TRUE ist.
-
Genmutant schrieb:
if ( j = (j+8))
Meckert bei sowas dein Compiler nicht zumindest ein bischen?
Du hast da nämlich keinen Vergleich (==), was es vermutlich sein sollte, sondern eine Zuweisung (=). Was grundsätzlich erlaubt ist, aber so gut wie nie erwünscht, da das Ergebnis (so gut wie?) immer TRUE ist.Der Vergleich wäre doch genauso Quatsch. Der wäre logischerweise immer false. Ein Apfel ist nicht das Gleiche wie ein Apfel plus 8 Äpfel. Da müsste es schon ein richtig, richtig großer Apfel sein...
-
Meckert bei sowas dein Compiler nicht zumindest ein bischen?
Du hast da nämlich keinen Vergleich (==), was es vermutlich sein sollte, sondern eine Zuweisung (=). Was grundsätzlich erlaubt ist, aber so gut wie nie erwünscht, da das Ergebnis (so gut wie?) immer TRUE ist.so gut wie?
Naja, halt nur wenn nicht null. Nullwerte sind beim Programmieren gar nicht so selten.
Haben die Zahlen bei dir nur 3 Bits?