Bitoperator &
-
Hallo Miteinander,
ich sitze gerade an einer Aufgabe aus einer Altklausr (ich bin Elektrotechnikstudent und bald steht die C++ Klausur an), an der ich so langsam verzweifle. Ich verstehe bei diesem Programm den Operator "&" in der if-Abfrage nicht so richtig. Auch etliche Überlegungen und Umrechnungen ins Binärsystem, schrittweises durchgehen der Schleife auf einem Blatt Papier und Recherche im Skript haben mir nicht weitergeholfen. Ich weiss, dass der Operator "&" zwei Binärzahlen addiert und, dass die Funktion "bit" aus einem dezimalen Wert einen binären Wert berechnet. Wann ist die if-Abfrage true, wann nicht? Wie sind die Vorraussetzungen der Variablen "u" und "t" dafür?
Anbei der Quellcode.Vielen Dank für Eure Mühe im Voraus.
#include <iostream> using namespace std; void bit(unsigned int u){ int t; for(t=128;t>0;t=t/2) if(u&t) cout << "1"; else cout << "0"; cout << "\n"; } int main(int argc, char *argv[]){ bit(123); system("pause"); return 0; }
-
1111011 = 123 ------------------------------ 128 = 10000000 & 1111011 = 0 64 = 1000000 & 1111011 = 1 32 = 100000 & 1111011 = 1 16 = 10000 & 1111011 = 1 8 = 1000 & 1111011 = 1 4 = 100 & 1111011 = 0 2 = 10 & 1111011 = 1 1 = 1 & 1111011 = 1kpl. ob das so verständlich wird

-
lolbob schrieb:
Ich weiss, dass der Operator "&" zwei Binärzahlen addiert
Dann weißt du falsch. operator& ist ein binäres UND, d.h. jedes Bit des Ergebnisses entspricht dem logischen UND der entsprechenden Bits der beiden argumente. Das ist was völlig anderes als die Addition. (Binärzahlen gibts übrigens nicht wirklich, das Zahlensystem ist eine Darstellungsangelegenheit, die rein garnichts mit der internen Repräsentation zu tun hat)
Beispiel:
2&3 = 2, weils binär dargestellt 0010 & 0011 ist, und nur das vorletze Bit ist bei beiden gesetzt, also ist 0010 = 2 das Ergebnis.317 & 84 = 100111101 & 001010100 = 000010100 = 20
Vielleicht machts bei dir ja jetzt sinn...
Das Argument der if-Abfrage ist ein int, und das entspricht genau dann false, wenn bei dem & 0 rauskommt, ansonsten ergibts true.
-
Edit, zu spaet, pumuckl war schneller

lolbob schrieb:
Ich weiss, dass der Operator "&" zwei Binärzahlen addiert und,
Nein. Der Operator '&' addiert nicht, er berechnet das bitweise AND.
0 AND 0 = 0
0 AND 1 = 0
1 AND 0 = 0
1 AND 1 = 1
Das wird auf jedes Bit der Zahl angewandt. Das ist ein unterschied zu addieren.Das resultat ist nur dann eins, wenn beide Bits eins sind, deshalb kannst du das verwenden um einzelne Bits aus einer Zahl auszulesen. noob_lolo hat das ja schoen aufgeschrieben :).
-
Ja, das hat mir schon mal etwas geholfen den Ablauf besser zu verstehen, Danke für die schnelle Antwort.
Aber wieso ist 10000000 & 1111011 = 0 und 1000000 & 1111011 = 1 ?
Für mich ist 10000000 & 1111011 = 11111011 also dezimal 251, falls der Operator "&" wie der mathematische Operator "+" verwendet wird.
Wo ist da mein Fehler?
-
pumuckl schrieb:
(Binärzahlen gibts übrigens nicht wirklich, das Zahlensystem ist eine Darstellungsangelegenheit, die rein garnichts mit der internen Repräsentation zu tun hat)
du zerstörst gerade alle meine träume 
-
Danke, ich war wohl auch zu langsam...;)
Ich habs jetzt endlich verstanden, Vielen Dank!