zahl als summe von 2er potenzen

shysdrag

Grünschnabel
hoffe ihr könnt mir ein paar tipps zu diesem c programm geben da ich einfach keine ahnung habe wie man das problem lösen könnte. es soll eine eingegebene zahl als summe von 2er potenzen dargestellt werden. und das ganze nur durch binäre Operatoren (&,<<,>>) und den ternären Operator (?:). und auch nur zahlen vom typ unsigned short
ausgegeben sollte ungefähr folgendes werden:

Geben Sie eine Zahl ein: 999
0 * 32768
0 * 16384
0 * 8192
0 * 4096
0 * 2048
0 * 1024
1 * 512
1 * 256
1 * 128
1 * 64
1 * 32
0 * 16
0 * 8
1 * 4
1 * 2
1 * 1
 
Das ist nicht so schwer:

Teile die Zahl (999) durch 2. Hat sie einen Rest, dann notiere eine 1, ansonsten eine 0.
Die resultierende Zahl (ohne Rest) teilst du wieder durch 2 .... usw.

Dein Beispiel:
999 / 2 = 499,5 => REST 1
499 / 2 = 249,5 => REST 1
.............
62 / 2 = 31 => REST 0
..............

Das Ergebnis musst du dann von unten nach oben ablesen.
Ich hoffe das stimmt jetzt alles so :-).

Gruß, Christian
 
Hi.

Denk einfach an die binäre Darstellung von Integer-Zahlen.

999dez = 1111100111bin (Vorne sind jetzt natürlich noch eine 0en dran wenns gespeichert ist.)

Jedes Bit repräsentiert eine Potenz von 2. Die 1 ganz rechts bedeutet 1 * 2^0, die links daneben ist 1 * 2^1, und so weiter.

Mit dem Wissen kannst dir einfach eine kleine Schleife bauen, in der du dir mittels Shiften und dem &-Operator ein Bit rausholst. Die "Bit-Position" in der Zahl sagt bei welcher 2er Potenz du bist, und eine 1 oder 0 sagt dir ob du sie addieren musst oder nicht.

Probiers mal selbst, sollte kein Problem mehr sein, zumindest wenn du das Zahlensystem und die zu verwendenden Operationen verstanden hast.

Wenn du auf schwierigkeiten stoßt, kannst dich ja wieder melden.

MfG,
Alex
 
Code:
int main() 
{
	unsigned short zahl = 1;
	for(int i=sizeof(short) * 8; i > 0; --i) {
		unsigned short bit = 1 << i - 1;
		bool set = bit & zahl;
		printf("%d * %d\n", set, bit);
	}
}

Man bin ich heute sozial :p Geht villeicht noch bisschen preformanter, aber hab grade keine Luste weiter drüber nachzudenken.

Gruß
 
besten dank für eure hilfe. wenn ich mir dieses "mickey mouse" programm anschaue dann ist das bei mir an den bit operatoren gescheitert. wusste nich wie ich das implementieren sollte. hab jetzt noch ne nette eingabe geschrieben und für die ausgabe musste ich mir auch etwas einfallen lassen, da es in c ja keine bool´schen variablen gibt.
 
Hmm ich dachte dass mit der Erweiterung vom C Standard der Datentyp bool dazugekommen ist. Ansonsten mach eben:

#define bool int
#define true 1
#define false 0

Gruß
 
Hi.

Der neue C Standard (C99) unterstützt einen boolschen Typ _Bool und via <stdbool.h> auch bool.

Code:
#include <stdbool.h>  /* bool, false, true sind Makros die zu
                         _Bool, 0, 1 expandiert werden. */

/* _Bool kann 0 bzw. 1 sein. */
_Bool b1 = false; 
bool b2 = 5;

printf ("%d\n", b2); /* gibt 1 aus */
 
hab das ganze jetzt nochmals mit bool probiert und ich erhalte folgende fehlermeldung: fatal error C1083: Include-Datei kann nicht geoeffnet werden: 'stdbool.h': No such file or directory
Fehler beim Ausführen von cl.exe. wenn ich mir die ganzen include dateien anschaue gibt es bei mir kein stdbool.h. verwende das microsoft visual studio 6.
 
Hi.

Offensichtlich unterstützt dein Compiler den neuen C Standard von 1999 nicht. Microsoft wird angeblich diesen Standard auch nicht vollständig in ihren Compiler implementieren weil sie mehr auf die Kompatibilität zum C++ Standard achten wollen.

Gruß
 
Zurück