Vorzeichen.Bit negieren

Bei einem 32-bit-Wert sollte ^= 0x80000000 das tun. Ich meine, das würde sogar bei float gehen (kommt auf das float-Verfahren an).
 
Code:
   int MINUS(int a, int b) {
   	int erg;
   
   	a ^= 0x80000000;
   	b ^= 0x80000000;
   
   	printf("a = %d\n",a);
   	printf("b = %d\n",b);
   	erg = a+b;
   	erg ^= 0x80000000;
   	return erg;
   }
was is daran falsch? Sry aber ich hab große Probs, die Arbeit mit Bit-Operatoren zu verstehen.
 
Du müsstest da nur b (das abgezogen werden soll) negieren, nicht beide. Sonst ist es lediglich eine Addition.

Zur Zeit machst du aus 1+2 -1+(-2), gibt -3, einmal negiert, gibt 3.
 
also der Code sieht jetz so aus:
Code:
  int MINUS(int a, int b) {
  	int erg;
  
  	b ^= 0x80000000;
  
  	printf("a = %d\n",a);
  	printf("b = %d\n",b);
  	erg = a+b;
  	return erg;
  }
bei a = 5 und b=3 kommt folgende Ausgabe:

a = 5
b = -2147483645
und der Rückfgabewert ist "-2147483640"

wo liegt der Fehler, was muss ich ändern?
 
moin


So gehts:
Code:
	unsigned int a, b;
	int erg;

	a=3;
	b=5;

	b ^= 4294967294;

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

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


mfg
umbrasaxum
 
Hallo,

so paßt es auch noch nicht ganz. Das Vorzeichen einer Zahl wird (wenn die Zweierkomplement-Darstellung benutzt wird) auf diese Art negiert:

Code:
   unsigned int a, b;
   int erg;
   
   a = 3;
   b = 5;
   
 b = ~b + 1;
   
   printf("a = %d\n",a);
   printf("b = %d\n",b);
   erg = a+b;
   
   printf("\n\n%d", erg);

Gruß
Flo
 
Zuletzt bearbeitet:
Zurück