Addition auf Bitebene
-
Hallo, ich bin gerade dabei eine Addition auf Bitebene zu implementieren, nur leider passt bei dem Folgenden Code irgendwas nicht aber ich finde partu keinen Fehler. Ich glaube ich sehe den Wald vor lauter Bäumen nicht mehr. Ich bediene mich der Logik eines Volladders in meinem Code.
nehmen wir als Beispiel ich übergebe
0, 0xFFFFFFFFF,1
void add(unsigned long &hi, unsigned long &low, unsigned long summand) { char bits = 32; unsigned long hineu=0,lowneu=0; char carry=0; while(bits) { lowneu<<=1; lowneu|= (low&1 ^ summand&1) ^ carry&1; carry = (low&1 && summand&1) || (low&1 && carry&1) || (summand&1 && carry&1); low>>=1; summand>>=1; bits--; } bits=32; printf("T1:\t%x,%x,%x\n",hi,lowneu,carry); /** Lowneu ist 0x8000000 sein und carry =1, carry is ok aber lowneu sollte eigentlich 0 sein in diesem fall**/ if(carry >0 || hi>0) { while(bits) { hineu <<= 1; hineu |= (lowneu&msb); lowneu <<= 1; lowneu |= (hi&1 ^ summand&1)^carry&1; carry = (hi&1 && summand&1) || (hi&1 && carry&1) || (summand&1 && carry&1); hi >>= 1; summand>>= 1; //printf("T2:\t%x,%x,%x\n",hineu,lowneu,carry); bits--; } } printf("T2:\t%x,%x,%x\n",hineu,lowneu,carry); /** Hier noch umdrehen der Werte MSB wird LSB **/ }
-
-
Hi ich habe mir den Code mal angeschaut, letztendlich steckt das selbe ja dahinter. Aber ich wöllte halt gerne wissen was bei mir nicht korrekt ist, denn auch nur so lernt man
. Also eigentlich müsste ja die Logik bei mir Richtig sein, denn ist das selbe nur in einem Schritt zusammengefasst.
-
Na dann sollte es ja auch genauso funktionieren... :p
Erwarte dir keine Lösung zu deiner Frage....das sieht nach Aufgabe aus. Empfehlenswert wäre (im Falle das es keine Aufgabe ist) "bitset" aus der STL (C++)
PS.: ...par tout...