Ich bin ein Informatikstudent und habe mich stundenlang mit dieser Frage beschäftigt.
Wir haben eine binäre vorzeichenlose Zahl X, dargestellt durch 12 Bits. Wir möchten ein System mit 1-Bit-Ausgabe bauen - Y, das ist '1', wenn X ohne Rest durch 15 geteilt wird.
Die einzigen Komponenten, die wir verwenden können, sind:
- 4-Bit-Addierer mit C0 (Übertrag) als Eingang und C4 als Ausgang.
- 1 einzelnes NOR-Gatter mit 3 Eingängen.
Ich habe ein Muster gefunden. Wenn ich 2 ^ i% 15 für 0 <= i <= 11 berechne (da es 12 Bits sind), dann bekomme ich für eine Sequenz 1248 1248 1248.
Und wenn ich 0001 1110 1111 habe, kann ich einfach alle Ziffern multiplizieren, summieren und prüfen, ob meine Nummer durch 15 teilbar ist.
0 + 0 + 0 + 8 + 1 + 2 + 4 + 0 + 1 + 2 + 4 + 8 = 30
Das Problem ist, ich habe keine Ahnung, wie ich es implementieren soll und ob es überhaupt effizient ist.
Ich würde gerne Hilfe bekommen.
quelle
Antworten:
Wissen Sie, wie Sie die Teilbarkeit durch 9 in Basis 10 überprüfen können?
Addieren Sie alle Ziffern mit der Basis-10-Arithmetik. Wenn das Ergebnis mehrstellig ist, wiederholen Sie den Vorgang. Stoppen Sie, wenn Sie eine Ziffer haben. Wenn die Ziffer 9 ist, war die ursprüngliche Zahl durch 9 teilbar. Dies funktioniert, weil der zu testende Teiler Basis 1 ist. Zum Beispiel ist 45 durch 9 teilbar und die Ziffern summieren sich zu 9, für zwei Ziffern wird nur ein Addierer benötigt. 999 ist auch, zwei Addierer werden für die drei Ziffern benötigt.
Haben Sie jetzt einen Hinweis, wie Sie die Teilbarkeit durch 15 prüfen können, wenn Sie über Rechenfunktionen der Basis 16 verfügen?
quelle
Die Technik ähnelt der, mit der Sie prüfen würden, ob eine Zahl durch 9 in Dezimalzahl teilbar ist. Wir müssen die Zahl in vier Bit-Ziffern aufteilen und dann die Ziffern wiederholt addieren, bis wir eine einzige Ziffer übrig haben.
Nennen wir die Ziffern XYZ
WENN X, Y, Z durch 15 teilbar ist, dann ist c2, r2 auch durch 15 teilbar. Außerdem ist c2, r2 kleiner als 0x1e. Wenn also r = 15 ist, war die ursprüngliche Zahl durch 15 teilbar. Wir testen, ob r gleich 15 ist, indem wir eins hinzufügen und das resultierende Übertragsflag betrachten.
Was mich verwundert, ist, wofür das Nor-Tor sein soll.
quelle
0FF, 1EF, 2DF, 3CF, 4BF, 5AF, 69F, 78F, 87F, 96F, A5F, B4F, C3F, D2F, E1F, F0F, FFF
. Ihre dritte Zeile muss lesenc3,r3 = r2 + c2 + 1
Die vollständige Antwort:
Wie @Neil_UK sagte, habe ich 12 Bits, und wenn ich überprüfen möchte, ob diese Zahl durch 15 teilbar ist, nehme ich die 12 Bits und betrachte sie als 3 Zahlen in Basis 16.
Ich addiere die drei Zahlen zusammen und füge den Übertrag immer zum nächsten Addierer hinzu.
Nachdem ich sie alle hinzugefügt habe, erhalte ich als Ergebnis eine Nummer. Wie gesagt, wir wollen sehen, ob die Zahl durch 15 teilbar ist und weil sich die Zahlen in der Basis 16 befinden. Wenn das Ergebnis also 15 ist, ist die Zahl durch 15 teilbar.
Wenn diese Zahl 15 ist, in binär
1111
, also wenn ich hinzufügen , werden1
zu1111
, werde ich bekommen carry1
und0000
.Wenn diese Zahl 0, binär
0000
, also wenn ich hinzufügen , werden1
zu0000
, werde ich bekommen0001
.Hier kommt der NOR ins Spiel.
Die Zahl ist durch 15 teilbar, wenn die letzten 3 Ziffern 0 sind.
Die Rennbahn:
Zum Beispiel:
1111 1111 1111
::1111
+1111
+1
= tragen1
und1111
1111 + 1111
+ tragen1
= tragen1
und1111
1111
+ tragen1
= tragen1
und0000
0001 1001 0101
: (405):0101
+1001
+1
=1111
1111
+0001
= tragen1
und0000
0000
+ tragen1
=0001
quelle