Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Azasel

unregistriert

1

05.06.2017, 15:01

[c,c++] Brauche verständliche Erklärung zum Logischen UND Opperator

Hey,
also ich weiss eigentlich schon, was der UND Opteraor macht, er vergleicht die Bits eines Binären Wertes mit einem anderen Bit und gibt '1' aus, wenn beide Bits überein Stimmen.
Aber in dem Folgendem Zusammenhang verstehe ich das nicht:

C-/C++-Quelltext

1
2
3
4
5
for(int i = 0; i < 8; i++)
    {
        binzahl[i] = n & 128 ? '1' : '0';
        n <<= 1;
    }

Hier wird nicht nur 1 Bit mit einem anderem Bit verglichen, sondern 1 Byte mit einem Byte und wieso brache ich dazu noch den
ternären Operator?
Dieses Codestück ist aus einem Buch.

2. Frage:
Ich möchte mittels einer Funktion einen String zurückliefern, so wie in dem gezeigten Beispiel.
Wieso muss ich den String als static deklarieren lassen?
Hier, ich zeige euch, was ich meine:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
char* binbin(int n)
{
        //Wieso static?
    static char binzahl[9];
    for(int i = 0; i < 8; i++)
    {
        binzahl[i] = n & 128 ? '1' : '0';
        n <<= 1;
    }
    binzahl[8] = '\0';
    return binzahl;
}

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

05.06.2017, 15:09

1) Du kannst es auch per IF formulieren statt ternärem Operator. Es wird effektiv geschaut, ob das höchste Bit gesetzt ist und dann entweder der Teilstring (genau genommen Char) '1' oder eben '0' geliefert, was wohl einer String-Darstellung des Bits entspricht.

2) Du musst es nicht als static deklarieren, aber die Adresse (char*) einer lokalen Variablen zurückzugeben ist auch so gar keine gute Idee und führt zu Abstürzen, während die static-Variante zumindest technisch funktioniert. Generell ist aber auch der static-Ansatz ziemlicher Mist. Für C++ würde ich hier eindeutig zu einem std::string raten.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Azasel

unregistriert

3

05.06.2017, 20:33

Danke

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

05.06.2017, 20:41

also ich weiss eigentlich schon, was der UND Opteraor macht, er vergleicht die Bits eines Binären Wertes mit einem anderen Bit und gibt '1' aus, wenn beide Bits überein Stimmen.

Nein, das stimmt so nicht.
Erstens passt deine Beschreibung eher auf den bitweisen Und-Operator (&) statt auf den logischen Und-Operator (&&). Zweitens ist sie trotzdem falsch ;)
Einfach gesagt: 1/true und 1/true ergibt 1/true, jede andere Kombination ergibt 0/false. Es muss eben der erste und der zweite Operand 1/true sein. Der bitweise Und-Operator tut dies bitweise und gibt dir einen Integer zurück (Größe abhängig von den Operanden), der logische Und-Operator tut dies nur einmal für den ganzen Wert und gibt dir einen bool zurück.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

5

05.06.2017, 21:34

Anders ausgedrückt:
100111001
und
110010011
ergibt
100010001
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Azasel

unregistriert

6

05.06.2017, 22:04

Zitat von »Azasel«
also ich weiss eigentlich schon, was der UND Opteraor macht, er vergleicht die Bits eines Binären Wertes mit einem anderen Bit und gibt '1' aus, wenn beide Bits überein Stimmen.


Nein, das stimmt so nicht.
Erstens passt deine Beschreibung eher auf den bitweisen Und-Operator (&) statt auf den logischen Und-Operator (&&). Zweitens ist sie trotzdem falsch ;)
Einfach gesagt: 1/true und 1/true ergibt 1/true, jede andere Kombination ergibt 0/false. Es muss eben der erste und der zweite Operand 1/true sein. Der bitweise Und-Operator tut dies bitweise und gibt dir einen Integer zurück (Größe abhängig von den Operanden), der logische Und-Operator tut dies nur einmal für den ganzen Wert und gibt dir einen bool zurück.


Man ist mir das peinlich, das ist mir vorhin schon bei der Recherche aufgefallen, aber ich habe es vergessen zu ändern, danke nochmal für den Hinweis. :D

Werbeanzeige