Ich versuche, die C-Programmierung zu erlernen, und ich habe einige Quellcodes studiert, und es gibt einige Dinge, die ich nicht verstanden habe, insbesondere in Bezug auf Bitwise-Operatoren. Ich habe einige Seiten dazu gelesen und irgendwie eine Vorstellung davon bekommen, was sie tun, aber als ich zurückging, um mir diese Codes anzusehen, konnte ich nicht verstehen, warum und wie sie verwendet wurden.
Meine erste Frage bezieht sich nicht auf die bitweisen Operatoren, sondern auf einige Ascii-Zaubereien:
-
Kann mir jemand erklären, wie der folgende Code funktioniert?
char a = 3; int x = a - '0';
Ich verstehe, dass dies getan wird, um ein Char in ein Int zu konvertieren, aber ich verstehe die Logik dahinter nicht. Warum/Wie funktioniert das?
-
Was nun die Bitwise-Operatoren betrifft, so fühle ich mich hier wirklich verloren.
-
Was bewirkt dieser Code?
if (~pointer->intX & (1 << i)) { c++; n = i; }
Ich habe irgendwo gelesen, dass ~ Bits invertiert, aber mir ist nicht klar, was diese Anweisung tut und warum sie das tut.
Dasselbe gilt für diese Zeile:
row.data = ~(1 << i);
-
Andere Frage:
if (x != a) { ret |= ROW; }
Was genau bewirkt der Operator |=? Von dem, was ich gelesen habe, ist |= OR, aber ich verstehe nicht ganz, was ist diese Anweisung tun.
Gibt es eine Möglichkeit, diesen Code so umzuschreiben, dass er leichter zu verstehen ist und nicht diese bitweisen Operatoren verwendet? Ich finde sie sehr verwirrend zu verstehen, daher hoffe ich, dass mich jemand in die richtige Richtung weist, um zu verstehen, wie sie besser funktionieren!
-
Ich habe jetzt ein viel besseres Verständnis für bitweise Operatoren und der ganze Code macht jetzt viel mehr Sinn.
Eine letzte Sache: Anscheinend hat niemand geantwortet, ob es einen "saubereren" Weg gibt, diesen Code so umzuschreiben, dass er leichter zu verstehen ist und vielleicht nicht auf "Bit-Ebene". Irgendwelche Ideen?