c# - 这种类型的功能或技术有名称吗?

标签 c# bitmask

嗨,我对编程有点陌生,更多的是一种爱好。我想知道以下逻辑或技术是否具有特定名称或术语。我当前的项目有 7 个复选框,一个对应一周中的每一天。我需要一个简单的方法来保存选中了哪些框。

下面是将选中的复选框保存到单个数字的方法。每个复选框的值都是最后一个复选框的两倍。当我想找出哪些复选框被选中时,我向后工作,看看我可以将总值除以复选框值多少次。

private int SetSelectedDays()
{
     int selectedDays = 0;
     selectedDays += (dayMon.Checked) ? 1 : 0;
     selectedDays += (dayTue.Checked) ? 2 : 0;
     selectedDays += (dayWed.Checked) ? 4 : 0;
     selectedDays += (dayThu.Checked) ? 8 : 0;
     selectedDays += (dayFri.Checked) ? 16 : 0;
     selectedDays += (daySat.Checked) ? 32 : 0;
     selectedDays += (daySun.Checked) ? 64 : 0;
     return selectedDays;
}

private void SelectedDays(int n)
{
     if ((n / 64 >= 1) & !(n / 64 >= 2))
     {
          n -= 64;
          daySun.Checked = true;
     }
     if ((n / 32 >= 1) & !(n / 32 >= 2))
     {
          n -= 32;
          daySat.Checked = true;
     }
     if ((n / 16 >= 1) & !(n / 16 >= 2))
     {
          n -= 16;
          dayFri.Checked = true;
     }
     if ((n / 8 >= 1) & !(n / 8 >= 2))
     {
          n -= 8;
          dayThu.Checked = true;
     }
     if ((n / 4 >= 1) & !(n / 4 >= 2))
     {
          n -= 4;
          dayWed.Checked = true;
     }
     if ((n / 2 >= 1) & !(n / 2 >= 2))
     {
          n -= 2;
          dayTue.Checked = true;
     }
     if ((n / 1 >= 1) & !(n / 1 >= 2))
     {
          n -= 1;
          dayMon.Checked = true;
     }
     if (n > 0)
     {
          //log event
     }
}

该方法可以很好地满足我的需要,但是,如果您确实看到另一种方法或更好的写作方式,我会对您的建议感兴趣。

最佳答案

其他人提到了位掩码,但我想我会向您展示一种简化代码的方法。

daySun.Checked = (n & 64) == 64;
daySat.Checked = (n & 32) == 32;
dayFri.Checked = (n & 16) == 16;
dayThu.Checked = (n & 8) == 8;
dayWed.Checked = (n & 4) == 4;
dayTue.Checked = (n & 2) == 2;
dayMon.Checked = (n & 1) == 1;

关于c# - 这种类型的功能或技术有名称吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2478319/

相关文章:

python - 从一组段范围构建掩码

c# - 图论算法

c# - 如何将 Dictionary<string, string> 变量从代码后面传递给 asp.net?

testing - 接触测试位掩码无法正常工作

algorithm - 计算按位 "AND"是 O(n) 或 O(n*log(n)) 中 2 的幂的数组中无序对的数量

c# - 无法加载文件或程序集 Microsoft.ReportViewer.WebForms 或其依赖项之一

javascript - 在 razor foreach 循环中创建 JavaScript 元素

c# - 尝试在 C# 中导入 native DLL 时出现 "Unable to find an entry point"异常

C++ 流位掩码为 boolean 值?