Verschiebeoperator in C#
-
Hallo,
jetzt hab´ ich alles durchprobiert. Ich sehe meinen Fehler nicht.
Oder funktioniert der Verschiebeoperator bei C# nicht so wie in C/C++.private bool FlagMarker(int i_value, UInt32 i_flags) { bool B_ret = false; UInt32 i_temp_flag = 0x00000001 << Convert.ToUInt32(i_value); if ((i_temp_flag & i_flags) == (i_temp_flag)) { B_ret = true; } return B_ret; }
Folgende Fehlermeldung:
Der Operator "<<" kann nicht auf Operanden vom Typ "int" und "uint" angewendet werden.
-
Naja, alles scheinst du noch nicht durchprobiert zu haben.
Z.B. 0x0000001 gemäß Fehlermeldung in ein uint zu casten, hast du vergessen.
-
private bool FlagMarker(int value, uint flags) { uint temp = 1u << (uint)value; return (temp & flags) == temp; }
-
Hallo,
cast hin oder her.
Jetzt hab ich mal alle überflüssigen casts weggelassen.
Weniger ist mehr.
private bool FlagMarker(int i_value, UInt32 i_flags) { bool B_ret = false; int i_temp_flag = 0x1 << i_value; if ((int)(i_temp_flag & i_flags) == (i_temp_flag)) { B_ret = true; } return B_ret; }
, dann geht´s.
Danke trotzdem.
fujitsufan
PS. das mit C# mach ich erst eine Woche.
-
fujitsufan schrieb:
Jetzt hab ich mal alle überflüssigen casts weggelassen.
Du hast noch einen vergessen. Ausserdem tummeln sich in Deinem Vergleich unnötige Klammern – und zu guter letzt ist das ganze sowieso unnötig aufwendig. Vor allem solche expliziten Zuweisungen an eine Boolean-Variable sind fast immer überflüssig.
Und zu guter Letzt: lass die Präfixe vor den Variablen weg, die bringen nichts und irritieren bloß.
Weniger ist mehr
.
Sehr richtig. Daher:
private bool IsFlagSet(int value, int flags) { int mask = 1 << value; return (flags & mask) == mask; }
EDIT: Den Funktionsnamen kann man auch anschaulicher machen.