Vorzeichen.Bit negieren

mffm hat gesagt.:
Hallo,

so paßt es auch noch nicht ganz. Das Vorzeichen einer Zahl wird auf diese Art negiert:

Code:
unsigned int a, b;
int erg;

a = 3;
b = 5;

b ^= 0xFFFFFFFF;
b += 1;

printf("a = %d\n",a);
printf("b = %d\n",b);
erg = a+b;

printf("\n\n%d", erg);

Gruß
Flo

was willst du:

Code:
void minus(int a,int b){
 int erg;

 cout << "a = " << a << "\nb = " << b << endl;

 erg = a+b^0x80000000;
 //oder: erg = a + ~b+1;

 cout << "a-b = " << erg << endl; }

Kennst du denn die Bedeutung der Bitoperatoren?
Du solltest dir die mal genauer anschauen, was die machen.
 
Hallo Beichtpfarrer,


Beichtpfarrer hat gesagt.:
Kennst du denn die Bedeutung der Bitoperatoren?
Du solltest dir die mal genauer anschauen, was die machen.

Ich kann nicht ganz verstehen, was Du mir vorwirfst.
Ich bin davon ausgegangen, daß die negativen Zahlen in der üblichen Zweierkomplement-Schreibweise dargestellt sind und nicht in der Schreibweise "Vorzeichen + Betrag". Und das Zweierkomplement habe ich mit meinem obigen Code erstellt, auch wenn der XOR-Operator sicher nicht optimal war.

Das Programm sollte auf den allermeisten Rechnern korrekt funktionieren, während dieses

Code:
  erg = a+b^0x80000000;

wohl nur selten ein richtiges Ergebnis berechnen wird.

Gruß
Flo
 
Hey, das war kein Vorwurf.
Das war die Frage, weil ich es vorher irgenwie so verstanden habe, dass du gesagt hast, du wüsstest nicht ganz, wie der Operator funktioniert oder so....
Das Zweierkomplement liefert dir den negativen Wert...
stimmt... das ^0x80000000 tut das nicht.. (uuuppps auch mein Fehler)
Ich hab das nicht weiter überdacht, da das höchste Bit durchaus etwas mit positiv bzw negativ zu tun hat... aber nicht in dieser Weise anwendbar...


edit: oups ich hab das was ganz falsch verstanden, löl...
Ich dachte, du wärst derjenige, der die Frage gestellt hat...
Außerdem hab ich deinen Beitrag irgenwie falsch gelesen...
 
Zuletzt bearbeitet:
Noch'n kleiner Tip:
die Variablen als 'long int' bzw. 'short int' deklarieren, dann haben sie auf jeder Maschine eine Länge von 32 bzw. 16 Bit. Nur 'int' wird von unterschiedlichen Compilern auf unterschiedlichen Maschinen auch unterschieldlich interpretiert, d.h. nicht überall gilt 'int == long int'
Aber das nur am Rande.

jokey2
 
Beichtpfarrer hat gesagt.:
edit: oups ich hab das was ganz falsch verstanden, löl...
Ich dachte, du wärst derjenige, der die Frage gestellt hat...
Außerdem hab ich deinen Beitrag irgenwie falsch gelesen...

Ach so, dann ist ja alles klar :-)
Ich hatte mich schon gewundert.
 
Zurück