Einzelnen Beitrag anzeigen
Ungelesen 19.10.09, 12:03   #2
urga
Mitglied
 
Benutzerbild von urga
 
Registriert seit: Aug 2009
Ort: void* (*wtf[])(void **);
Beiträge: 453
Bedankt: 137
urga ist noch neu hier! | 0 Respekt Punkte
Standard

also das hier funktioniert, allerdings wird nicht abgefangen ob auch wirklich ein int eingelesen wurde. versuch aber bitte zu verstehen was da passiert.
Code:
// ein int belegt sizeof(int) bytes.
	// damit sizeof(int)*8 bits. [bN, .... b1, b0]
	// wenn ich nun eine 1 auf position bN bringen möchte, muss ich
	int shift = ((sizeof (int)) * 8) - 1;
	// shift mal die 1 nach links schieben.
	unsigned int pattern = 1 << shift;
	// pattern ist nun [1, 0, 0 , .... , 0]
	int the_int;
	// the_int ist der int der binär ausgegeben werden soll.

	printf ("bitte einen int eingeben ");
	scanf ("%d", &the_int);
	
	// nun muss N (also shift+1) mal geprüft werden ob bei the_int das N'te bit gesetzt ist.
	int i;
	for (i = 0; i <= shift; i++) {
		if (the_int & pattern) { 
			printf ("1");
		}
		else {
			printf ("0");
		}
		// nun noch die 1 im pattern um eine position nach rechts.
		// (*) aus der doku:
		// The right shift operator causes the bit pattern in the first operand to be shifted right the number 
		// of bits specified by the second operand. 
		// Bits vacated by the shift operation are zero-filled for unsigned quantities. 
		// For signed quantities, the sign bit is propagated into the vacated bit positions
		// 
		// wir wollen das nullen nachgeschoben werden. desshalb ist pattern unsigned...
		pattern = pattern >> 1;
		if (i < shift) {
			printf ("|");
		}
	}
	printf ("\n");
__________________
entropie erfordert keine wartung
urga ist offline   Mit Zitat antworten