Das ist Bitlogik.
Wenn du 3 in die Potenzen von 2 zerlegst sind das:
1* 2^0 = 1 und
1* 2^1 = 2
Alle zugewiesenen Werte sind Potenzen von 2. Somit kannst du aus einer Summe jederzeit feststellen welche 2-er Potenzen zur Summenbildung geführt haben.
Denn eine kleinere Ganzzahlzerlegung als mit 2-er Potenzen geht nunmal nicht.
Du darfst auch nicht die Funktion _CBRead() mit der Switch-Auswertung durcheinanderwürfeln.
_CBRead() diente hier nur dazu um optisch sofort das Ergebnis der markierten Boxen sichtbar zu machen. Und $str &= 3 bedeutet, dass die BitAnd-Überprüfung ergibt, dass die Checkbox Nr.3, mit dem Wert 4 markiert ist.
Die Variable $str führt nur die Namen der markierten Boxen zusammen und schreibt sie in das Inputfeld.
Für die normale Arbeit benötigst du die Funktion _CBRead() nicht, diente wirklich nur der Veranschaulichung.