让我们假设我有天的名单:获得从DaysLIST
- 太阳 - 1
- 周一 - 2
- 周二 - 4
- 周三 - 8
- 周四 - 16
- 周五 - 32
- 周六 - 64
现在用户可以选择一个或一个以上从清单。我的数据库存储刚刚天(例如:如果用户选择的太阳和MON然后值被得到存储在数据库3)的总和。现在我想显示用户他选择的日子。计算这个的公式是什么?
我应该写入该二进制逻辑??
让我们假设我有天的名单:获得从DaysLIST
现在用户可以选择一个或一个以上从清单。我的数据库存储刚刚天(例如:如果用户选择的太阳和MON然后值被得到存储在数据库3)的总和。现在我想显示用户他选择的日子。计算这个的公式是什么?
我应该写入该二进制逻辑??
创建Flags枚举为工作日给他们当作一个位字段:
[Flags]
public enum WeekDays
{
Sun = 1,
Mon = 2,
Tue = 4,
Wed = 8,
Thu = 16,
Fri = 32,
Sat = 64
}
然后保存到数据库
WeekDays value = WeekDays.Sun | WeekDays.Mon; // Sun, Mon
从数据库使用读HasFlag方法当以验证是否值包含给定的周日(如果给定位域设置为枚举值):
WeekDays value = ReadValueFromDatabase();
foreach(WeekDays day in Enum.GetValues(typeof(WeekDays)))
{
if (value.HasFlag(day))
// day is selected
}
这是同位运算的用法:
(value & day) == day
试试这个:
[Flags]
public enum Day
{
Sunday = 1,
Monday = 2,
Tuesday = 4,
Wednesday = 8,
Thursday = 16,
Friday = 32,
Saturday = 64,
}
Day d = Day.Friday | Day.Saturday;
Console.WriteLine(d);
Console.WriteLine((int)d);
此打印: 星期五,星期六和96
或者谢尔盖刚刚张贴在我面前有什么...
创建一个程序,可以从数据库中获得总和的余数
<pre>
private int GetRemainder(int DaySum)
{
int xRemainder = 0;
if(DaySum > 64)
xRemainder = DaySum % 64;
else if(DaySum > 32)
xRemainder = DaySum % 32;
else if(DaySum > 16)
xRemainder = DaySum % 16;
else if(DaySum > 8)
xRemainder = DaySum % 8;
else if(DaySum > 4)
xRemainder = DaySum % 4;
else if(DaySum > 2)
xRemainder = DaySum % 2;
else if(DaySum > 1)
xRemainder = DaySum % 1;
return xRemainder;
}
private string SelectedDay(int SumValue)
{
if((SumValue/64) > 0)
return "Saturday";
else if((SumValue/32) > 0)
return "Friday";
else if((SumValue/16) > 0)
return "Thursday";
else if((SumValue/8) > 0)
return "Wednesday";
else if((SumValue/4) > 0)
return "Tuesday";
else if((SumValue/2) > 0)
return "Monday";
else if((SumValue/1) > 0)
return "Sunday";
}
</pre>
有变量来存储值
<pre>
int SumOfDaysSelected = 0;
string DaysSelected = "";
</pre>
然后创造条件,检查选择哪些某一天或几天因变量的值SumOfDaysSelected
<pre>
while(SumOfDaysSelected > 0)
{
if(DaysSelected == "")
DaysSelected = SelectedDay(SumOfDaysSelected);
else
DaysSelected = DaysSelected + "," + SelectedDay(SumOfDaysSelected);
SumOfDaysSelected = GetRemainder(SumOfDaysSelected);
}
</pre>
如果要存储为二进制二进制逻辑应该与它的工作方式。但作为@SergeyBerezovskiy说,你有什么** **实际试过? –