jede 8. Stelle durch | trennen

rerl

Grünschnabel
Hallo meine frage is wie ich jedes 8. Byte durch ein | trennen kann.
Ich will dezimal Zahlen in binärer Form darstellen. Das klappt soweit ganz gut, aber es wird nicht jede 8. Zahl durch ein | getrennt.

Hier mal meine Idee. Ich hoffe ihr könnt mir helfen. Müsste doch mit ner for Schleife und if abfrage funktionieren.
Code:
#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; 
}
 
Moin und willkommen bei Tutorials.de!

Zuerst eine Bitte:
nutze für Code-Postings bitte die Code-Tags (entweder den #-Button im Editor oder klammere den Code mit [_CODE_] [_/CODE_] oder bspw. auch [_/JAVA_] [_/JAVA_] (jeweils OHNE die Unterstriche)! Codeschnipsel werden dadurch weitaus lesbarer :p

if ( j = (j+8))
{
printf ("|");
}

Das kann so nicht funktionieren!
Egal welchen Wert 'j' gerade hat --> er wird NIE gleich 'j+8' sein !!
[EDIT] Zudem hast Du eh' eine Zuweisung geschrieben '=', keinen vergleich '==' ! ! !

Weiterhin verstehe ich den Sinn der innerern FOR-Schleife (for (j=8;j<32;j++))nicht wirklich!
Willst Du hier erst ab Stelle los laufen, oder was :confused:

Nimm doch einfach EINE Schleife von 0-31 und zähle mit einer eigen Zählvariablen, die Du in jedem Durchlauf inkrementierst, die Stellen ab.

Dann fügst bei jeder 8. Stelle den '|' ein :)

Gruß
Klaus
 
Zuletzt bearbeitet:
Hi,
vfl_freak hat recht. So müsste es gehen:

Achtung ungetestet

Code:
#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++) 
	{ 
		if((i+1)%8 == 0)
			printf("|"); 

		printf("%d",bin[31-i]); 
	} 
	printf("\n"); 
	return 0; 
}


gruß
col.blake
 
Hallo,

eine Schleife reicht auch:
C:
#include <stdio.h>

int main()
{
  unsigned int value, i;
  printf("Please enter an integer:");
  scanf("%u", &value);

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

  printf("\n");
  return 0;
}
Außerdem sollte man bei scanf den passenden Typspezifizierer verwenden (%u für unsigned int).

Grüße, Matthias
 
Zurück