5.6k Aufrufe
Gefragt in Anwendungen(Java,C++...) von rerl Einsteiger_in (11 Punkte)
Hallo,
mein Problem ist folgendens. Ich bin totaler Programmier Anfänger und brauche Hilfe.
Die Aufgabenstellung sieht so aus das ich ein Programm schreiben soll das die Binärpräsentation eines Integers ausgeben soll. Die einzelnen Bytes sollen mit "|" getrennt werden und der Integer soll vorher eingelesen werden.
Bitte um rasche Lösungsvorschläge

Schon mal danke im voraus

Mein programm für die umwandlung von dezimal auf binär sieht so aus:
#include <stdio.h>

int main()
{
unsigned int value,i,bin[32];
int counter
printf("Please enter an integer:");
scanf("%d",&value);

for(i=0;i<32;i++)
{
bin[i]=((value>>i)&1);

}

for(i=0;i<32;i++)
{

printf("%d",bin[31-i]);
}

}

printf("\n");
return 0;
}

brauch nur mehr diese ("|") zwischen den bytes

soll nachher sowas in der Art rauskommen:

Interg: 0
00000000|00000000|00000000|00000000

5 Antworten

0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Sicher, dass folgende Zeile funktioniert?
bin=((value>>i)&1);


Ansonsten gib doch das Zeichen einfach aus: mach aus
printf("%d",bin[31-i]);
einfach
printf("%d|",bin[31-i]);
0 Punkte
Beantwortet von rerl Einsteiger_in (11 Punkte)
Danke für den Tipp aber das löst mein problem nicht wirklich.
Ich will, dass nach allen 8 Zeichen ein | steht und nicht nach jedem.
Versuch das ganze mit ner for Schleife, aber funkt nicht ganz so super.

#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;
}
0 Punkte
Beantwortet von rerl Einsteiger_in (11 Punkte)
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. Bei deiner Variante is jedes Zeichen durch | getrennt.

#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;
}
0 Punkte
Beantwortet von dr-ma-busen Mitglied (261 Punkte)
Moin!

Ich würde versuch das mit der Trennung in die schleife zu packen die das umrechnet. Dort über eine Zählvariable, wenn die den wert 8 hat das trennzeichen ausgeben und wieder auf 0 setzen.

Die hier hatte ich mir mal gebastelt. Rechnet alle Dez. Zahlen um in ein andere Zahlen system. Von Zahlen mit der basis 2 bist zur basis 16.
Habe das mal an entsprechender stelle mal ergänzt mit ein Trennzeichen.

int main() {

unsigned int zahl, basis;
char out[200];

printf("Zahl:");
scanf("%d",&zahl);

printf("Basis:");
scanf("%d",&basis);

char cl[16]= {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
int sc = 0, idx=0;

while(zahl >= 1){

if(sc++ == 8){
out[idx++] = '|';
sc = 0;
}

out[idx++] = cl[ (zahl % basis) ];
zahl /= basis;
}

while(--idx >= 0){
printf("%c", out[idx]);
}
printf("\n");
return 0;
}


MfG
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Ungetestet:

#include <stdio.h>
int main() {
unsigned int value, i;

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

for( i= 31; i>= 0; i-- ) {
printf( "%d|", (value>> i)&& 1 );
}

return 0;
}
...