C Was macht (der Rechenoperator) "&"

Y0DA92

Lt. Junior Grade
Registriert
Juni 2007
Beiträge
481
Wie der Titel schon verlauten lässt wüsste ich gerne was (a & b) in C bedutet. Habe dieses Programm geschrieben:

Code:
#include <stdio.h>

int main() {

int i, a, b, c, d;

for(i=0; i<11; i++) {
	a = (i & 1);
	b = (i & 2);
	c = (i & 3);
	d = (i & 4);

	printf("%d & 1 ergibt %d\n",i,a);
	printf("%d & 2 ergibt %d\n",i,b);
	printf("%d & 3 ergibt %d\n",i,c);
	printf("%d & 4 ergibt %d\n\n",i,d);
	}
}

Mit dieser Ausgaben:

0 & 1 ergibt 0
0 & 2 ergibt 0
0 & 3 ergibt 0
0 & 4 ergibt 0

1 & 1 ergibt 1
1 & 2 ergibt 0
1 & 3 ergibt 1
1 & 4 ergibt 0

2 & 1 ergibt 0
2 & 2 ergibt 2
2 & 3 ergibt 2
2 & 4 ergibt 0

3 & 1 ergibt 1
3 & 2 ergibt 2
3 & 3 ergibt 3
3 & 4 ergibt 0

4 & 1 ergibt 0
4 & 2 ergibt 0
4 & 3 ergibt 0
4 & 4 ergibt 4

5 & 1 ergibt 1
5 & 2 ergibt 0
5 & 3 ergibt 1
5 & 4 ergibt 4

6 & 1 ergibt 0
6 & 2 ergibt 2
6 & 3 ergibt 2
6 & 4 ergibt 4

7 & 1 ergibt 1
7 & 2 ergibt 2
7 & 3 ergibt 3
7 & 4 ergibt 4

8 & 1 ergibt 0
8 & 2 ergibt 0
8 & 3 ergibt 0
8 & 4 ergibt 0

9 & 1 ergibt 1
9 & 2 ergibt 0
9 & 3 ergibt 1
9 & 4 ergibt 0

10 & 1 ergibt 0
10 & 2 ergibt 2
10 & 3 ergibt 2
10 & 4 ergibt 0

Auch wenn sich eine gewisse Regelmäßigkeit abzeichnet. Wie nennt sich diese Operation? Und welcher Regel folgt sie aus mathematischer Sicht?
 
Aber ich abreite ja nicht mit Bits, sondern mit "größeren" Werten. Wird die drei dann einfach als "11" und so weiter interpretiert?
Wenn ja dann habe ich es verstanden, bedanke mich, und der Thread kann geschlossen werden...
 
Zuletzt bearbeitet:
es wird nicht 3 als 11 interpretiert, sondern 11 als 3 ;)
die dezimale schreibweise ist nur für uns menschen da, die maschinen arbeiten immer auf binär.
 
Angenommen du willst aus einer beliebigen Zahl nur die letzten 5 Bits anschauen:
Code:
int zahl = liesVonIrgendwoEineZahl();
int letzteFuenfBits = zahl & 0x1F;
Mit dem & Operator lässt sich so z.B. eine Bitmaske realisieren.
Dort wo ich arbeite (Embedded Software Entwicklung für Steuergeräte im Automobilbereich) ist das "täglich Brot" und kein bisschen unübersichtlich :).
 
Im Studium haben wir das in Java auch gebraucht. Da wurde ein Bild in ein Integer-Array eingelesen, pro Pixel ein Integer. Ein Integer hat in Java immer 32 Bit, wobei die ersten 8 Bit den Alpha-Wert, und die anderen 24 Bit jeweils den Rot-, Grün- und Blauanteil des Pixels bezeichneten.

Wenn man nun einen solchen Pixel in einem Integer gespeichert hat, kann man zum Beispiel so den Grün-Anteil extrahieren:
Code:
int gruen = (pixel >> 8) & 0xFF;

Mittlerweile habe ich aber noch viel mehr Anwendungsszenarios für diese Operatoren kennengelernt, wie zum Beispiel in vielen Algorithmen.
 
Zurück
Oben