So führen Sie Addition zwei separate Paare von 4-Bit-Ganzzahlen in einem einzelnen Betrieb mit einer einzigen Zugabe in C++

Programme in C++. Entwicklerforum
Anonymous
 So führen Sie Addition zwei separate Paare von 4-Bit-Ganzzahlen in einem einzelnen Betrieb mit einer einzigen Zugabe in

Post by Anonymous »

Aus meiner Lektüre dieser Antwort ist es möglich, ein Paar von zwei 4-Bit-Ganzzahlen mit nur einer Ergänzung und einigen bitweisen Operationen durchzuführen, und der Autor dieser Frage besagt, dass es einfach sein sollte, diese Methode a zu verallgemeinern bisschen. Daher versuche ich, diese Methode auf die Zugabe von vier 8-Bit-Ganzzahlen zu verallgemeinern, die in einer 32-Bit-Ganzzahl gespeichert sind.

Code: Select all

uint32_t a, b;

uint32_t c = a + b;
uint32_t r = a ^ b ^ c; // calculate all carry
uint32_t s = r & (0x01010100); // carry of only the digits that we care
uint32_t sum = c - s; // undo the carry on these digits
Dieser Code funktioniert für die meisten Eingaben, aber ich habe Ausnahmen gefunden, wenn ich versuche, Ganzzahlen hinzuzufügen, die im Grunde genommen Komplementform negativer Zahlen in der Nähe von 0 sind. Wenn ich beispielsweise festgelegt habe

Code: Select all

a = 0xfffeff00 // (-1,-2,-1, 0)
b = 0x01010100 // ( 1, 1, 1, 0)
Das erwartete Ergebnis ist 0x00ff0000 . Es läuft < /p>

Code: Select all

c = 0x01000000 // ( 1, 0, 0, 0)
r = 0xfffffe00 // (-1,-1,-2, 0)
s = 0x01010000 // ( 1, 1, 0, 0)
sum=0xffff0000 // (-1,-1, 0, 0)
Die ersten beiden Ziffern von Summe werden zu FF (was -1 darstellt), die korrekte Zahl sollte jedoch 0 sein. Dies liegt daran, dass beim Subtrahieren von C = 01 00 00 00 00 mit S = 01 01 00 00 die Subtraktion der zweiten Gruppe das Ergebnis in der ersten Gruppe beeinflusst.
Ich möchte den letzten Schritt verbessern, um dieses Problem zu beseitigen, kann aber keine gute Lösung finden.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post