【问题标题】:How to get values of combined bitwise如何获得按位组合的值
【发布时间】:2018-11-15 17:06:21
【问题描述】:

我有从复选框中选择的具有按位值 [1,2,4,8,16,32] 的类型,当保存到数据库时,我组合选定的值并获得例如 42 的值。如何计算从组合值中选择的值,在编辑屏幕上我想重新检查选择的值。

【问题讨论】:

  • 您可以检查Enums 上使用的Flags 属性。保存时可以将其转换为 int。
  • 你有位值。使用屏蔽(按位与)来确定是否设置了位。例如,如果设置了值为16 的位,value & 16 将非零。
  • Enumerable.Range(0, 31).Select(i => 1 << i).Where(i => (42 & i) != 0) => 2, 8, 32。希望您没有超过 32 个复选框,并注意负值。 (我不喜欢这种存储东西的方式。)

标签: c# bit-manipulation


【解决方案1】:

检查是否例如8 包含在您的组合值中,您可以像这样使用按位和运算符:

int combinedValue = 42;
int bitwiseValue = 8;
bool isBitwiseValueChecked = (combinedValue & bitwiseValue) == bitwiseValue;

【讨论】:

    【解决方案2】:

    使用enum 为标志建模:

    public static void Main()
    {
        Console.WriteLine((MyFlags)1); // Foo
        Console.WriteLine((MyFlags)7); // Foo, Bar, Baz
    
        Console.WriteLine((int)(MyFlags.Foo | MyFlags.Bar)); // 3
    }
    
    [Flags]
    enum MyFlags 
    {
        Foo = 1,
        Bar = 2,
        Baz = 4
    }
    

    然后,要列出所有成员,请参阅List all bit names from a flag Enum

    【讨论】:

      猜你喜欢
      • 2017-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-26
      • 2016-12-26
      • 2021-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多