前提・実現したいこと
FlagsAttribute付きのenum型でビット毎の反転を行ないたいです。
C#
1[Flags] 2public enum UnitElement { 3 Blue = (1 << 0), // 青髪 4 Red = (1 << 1), // 赤髪 5 6 Male = (1 << 2), // 男性 7 Female = (1 << 3), // 女性 8 9 Human = (1 << 4), // 人間 10 Robot = (1 << 5), // 機械 11 12 Naked = (1 << 6), // 裸眼 13 Glass = (1 << 7), // 眼鏡 14}
発生している問題・エラーメッセージ
~演算子を用いたのですが、符号が反転されるらしく、望んだ結果になりません。
C#
1// Blue, Male, Robot, Glass 2UnitElement e = (UnitElement.Blue | UnitElement.Male | UnitElement.Robot | UnitElement.Glass); 3 4// Red, Female, Human, Nakedにしたいが、負の整数値(この場合は-166)になる 5UnitElement invert = ~e;
試したこと
- enumの定義段階で符号なし型にキャスト(全く変化なし)
C#
1[Flags] 2public enum UnitElement { 3 Blue = (char)(1 << 0), // 青髪 4 Red = (char)(1 << 1), // 赤髪 5 以下略 6}
- ~演算子を使う対象を符号なし型にキャスト(変化なし)
C#
1// Blue, Male, Robot, Glass 2UnitElement e = (UnitElement.Blue | UnitElement.Male | UnitElement.Robot | UnitElement.Glass); 3 4// Red, Female, Human, Nakedにしたいが、負の整数値(この場合は-166)になる 5UnitElement invert = ~(char)e;
まとめ
属性の管理をしたくてFlagsAttributeのenumを定義したので、符号情報は最初から不要です。
意図したとおりに反転できる方法をご教授いただければ幸いです。
コメント削除
回答2件
あなたの回答
tips
プレビュー