Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
--- C++ (http://www.informatikerboard.de/board/thread.php?threadid=1497)


Geschrieben von ex am 09.05.2013 um 12:13:

  C++

Meine Frage:
Hallo leute ich habe gerade probleme bei einer Aufgabe:

Ich habe leider noch keine Ansätze.

Implementieren sie einen Code Ausschnitt mit einfacher EIn und Ausgabe mit dem sie die Multiplikation zweier Dualzahlen durchführen können, wenn ihr Prozessor nur addieren und schieben kann , nicht aber multiplizieren.

Für tipps wäre ich dankbar.

Meine Ideen:
keine



Geschrieben von ex am 09.05.2013 um 12:15:

 

Diese Zahl soll ich dabei ausrechnen:

0101*10111



Geschrieben von eulerscheZahl am 09.05.2013 um 13:36:

 

Erst mal überlegen, wie die Multiplikation mit Stift und Papier funktioniert:
code:
1:
2:
3:
4:
5:
6:
7:
8:
0101*10111
  0101
   0000
    0101
     0101
+     0101
----------
  01110011

Die einzige Multiplikation die bleibt, ist die mit der 1 und 0, bei beiden kann mal das Ergebnis sagen, ohne rechnen zu müssen.
Erkennst du ein Muster?



Geschrieben von C++ am 09.05.2013 um 14:30:

 

1*1 = 1

und 1*0 = 0

Wenn ich das im code schreiben soll mit addition ,soll ich einfach die if beding so schreiben ?

In worten irgendie so:

Wenn zwei gleiche Zahlen addiert werden , soll sich die Zahl nicht ändern , bei unterschiedlich zahlen schon?

Wäre die denkweise irgendwie richtig?



Geschrieben von eulerscheZahl am 09.05.2013 um 14:39:

 

Die erste Zahl (0101) bleibt als ganzes.
Die zweite wird bitweise untersucht:
das Ergebnis (zu Beginn=0) immer um eins shiften
wenn die zweite Zahl am betrachteten Bit eine 1 hat, 0101 auf das Ergebnis addieren.

Also
erg=00000000
erg shiften -> bleibt 00000000
erstes Bit der 2. Zahl betrachten
ist eine 1, also erg+=0101, somit erg= 00000101

shiften -> erg=00001010
zweites Bit der zweiten Zahl ist 0, also nicht addieren

shiften
addieren da 1
...



Geschrieben von ex am 09.05.2013 um 14:45:

 

#include <iostream>

using namespace std;

int main()
{
int a = 0101;
int b = 10111;
int summe;

int i = 0;

for(int i = 0; i > 0; i++){





}


}

Ich bin ganz ehrlich ,ich habe probleme deine idee zu verstehen.

Ich habe mal mein code soweit gepostet .

JEtzt wollte ich irgendwie eine if bedingung erstellen in der for schleife , habe aber keine idee wie.



Geschrieben von eulerscheZahl am 09.05.2013 um 14:57:

 

So kannst du a und b aber nicht eingeben, das sind ja Binärzahlen, der Compiler interprtiert sie aber dezimal.

Nochmal zurück zur Multilpikation mit Stift und Papier:
Ich habe das mal so gelernt, dass man die 2. Zahl (10111) Ziffer für Ziffer durchgeht, mit der ersten Zahl "multipliziert" (binär heißt das, die 1. Zahl abzuschreiben, oder eine 0 hinzuschreiben) und das Ergebnis dann unter die entsprechende Ziffer der 2. Zahl schreibt. Genau diesen Algorithmus würde ich in Code fassen.


Forensoftware: Burning Board, entwickelt von WoltLab GmbH