Warum hat Go &^
, den "bit clear (AND NOT)" Operator?Warum hat Go einen "bit clear (AND NOT)" Operator?
Gibt es jemals einen Unterschied zwischen a &^ b
und a & ^b
?
Warum hat Go &^
, den "bit clear (AND NOT)" Operator?Warum hat Go einen "bit clear (AND NOT)" Operator?
Gibt es jemals einen Unterschied zwischen a &^ b
und a & ^b
?
Es gibt einen feinen Unterschied, der den Umgang mit Literalen und nicht typisierten Konstanten mit dem expliziten Bit-Clear-Operator erleichtert.
Untyped Integer haben ihren Standardtyp als int, so etwas wie a := uint32(1) & ^1
ist illegal, da^1 zuerst ausgewertet wird und es als^int (1) ausgewertet wird, was gleich -2 ist. a := uint32(1) &^ 1
ist jedoch legal, da hier 1 basierend auf dem Kontext als uint32 ausgewertet wird.
Es könnte auch einige Leistungsgewinne geben, wenn ein explizites Bit gelöscht wird, aber ich bin mir nicht sicher.
Zumindest auf AMD64 kompilieren sie auf den gleichen Maschinencode, also gibt es keinen Leistungsunterschied dort. – JimB
JimB, ich nehme an du meinst wenn du alles unterschrieben hast? –