2017-01-30 9 views
-3

私は、ビットフィールドの値を設定およびクリアする必要がある関数を含むクラスを持っています。ラインでI以下定数値 '-1025'は 'ushort`に変換できません

FlagsValues &= ~(UInt16)EFlagsValues.NIn;

にエラーが一定の値が「-1025」私のコードが間違っている何ushort

に変換できないことを言ってますし、なぜ私はこのエラーを取得していますか。?

public class MySetupC 
    { 

      private UInt16 m_FlagsValues; 
      private UInt16 m_FlagsMask; 

      public UInt16 FlagsMask { get { return m_FlagsMask; } private set { m_FlagsMask = value; } } 
      public UInt16 FlagsValues { get { return m_FlagsValues; } private set { m_FlagsValues = value; } } 

      [Flags] 
      public enum EFlagsMask 
      { 
       None = 0, 
       AIn = (1 << 0), //1 
       BIn = (1 << 1), //2 
       CIn = (1 << 2), //4 
       DIn = (1 << 3), //8 
       EIn = (1 << 4), //16 
       FIn = (1 << 5), //32 
       JIn = (1 << 6), 
       KIn = (1 << 7), 
       LIn = (1 << 8), 
       MIn = (1 << 9), 
       NIn = (1 << 10), 
       OIn = (1 << 11), 
      } 

      [Flags] 
      public enum EFlagsMask 
      { 
       None = 0, 
       AIn = (1 << 0), //1 
       BIn = (1 << 1), //2 
       CIn = (1 << 2), //4 
       DIn = (1 << 3), //8 
       EIn = (1 << 4), //16 
       FIn = (1 << 5), //32 
       JIn = (1 << 6), 
       KIn = (1 << 7), 
       LIn = (1 << 8), 
       MIn = (1 << 9), 
       NIn = (1 << 10), 
       OIn = (1 << 11), 
      } 

     public void SetNIn(bool enable) 
     { 
      if (enable) 
      { 
       FlagsValues |= (UInt16)EFlagsValues.NIn; 
       FlagsMask |= (UInt16)EFlagsMask.NIn; 
      } 
      else 
      { 
       //negate 
       FlagsValues &= ~(UInt16)EFlagsValues.NIn; 
       FlagsMask |= (UInt16)EFlagsMask.NIn; 
      } 
     } 
    } 
+0

1 << 10は1024を与えます。〜は符号なしで-1025になります。 –

+0

他のビットに触れることなくビット10を消去したいだけです。 – liv2hak

答えて

1

は、列挙型の値ではなく、UInt16型であなたの〜演算子を行い、その後のUInt16

public enum EFlagsMask : UInt16 { 

からあなたの列挙型を導出します。

FlagsValues &= (UInt16)~EFlagsMask.NIn;