我希望能够在本月的日子里得到一个标志枚举。
目前我已经找到了很多年份或星期几的例子,它们基于枚举:short并使用十六进制格式来指定项目的值。
但是我认为短期是31天+最后一天的选择。我认为一个int会做,但我不知道如何实现它并允许按位操作发生。
有人可以帮忙吗?
答案 0 :(得分:2)
我想我已经在这里解决了以下问题:
/// <summary>
/// Values for days of the month (1, 2, etc., Last Day) These carry the Flags
/// attribute so DaysOfTheMonth and be combined with | (or).
/// </summary>
[Flags]
public enum DaysOfTheMonth : uint
{
Day01 = 0x1,
Day02 = 0x2,
Day03 = 0x4,
Day04 = 0x8,
Day05 = 0x10,
Day06 = 0x20,
Day07 = 0x40,
Day08 = 0x80,
Day09 = 0x100,
Day10 = 0x200,
Day11 = 0x400,
Day12 = 0x800,
Day13 = 0x1000,
Day14 = 0x2000,
Day15 = 0x4000,
Day16 = 0x8000,
Day17 = 0x10000,
Day18 = 0x20000,
Day19 = 0x40000,
Day20 = 0x80000,
Day21 = 0x100000,
Day22 = 0x200000,
Day23 = 0x400000,
Day24 = 0x800000,
Day25 = 0x1000000,
Day26 = 0x2000000,
Day27 = 0x4000000,
Day28 = 0x8000000,
Day29 = 0x10000000,
Day30 = 0x20000000,
Day31 = 0x40000000,
DayLast = 0x80000000
}
答案 1 :(得分:0)
您不需要枚举,您可以使用4字节整数来存储该值,并与表示为整数的天数进行比较,这可能更方便。
在下面的代码中(使用C#),第31天(最左边的位),3和1被标记为已选中。我没有使用可用于特殊标志的最低位。您可以查看下面的代码,看看如果选择了一天如何阅读:
Int32 selected = Convert.ToInt32("10000000000000000000000000001010", 2);
for (int day = 1; day <= 31; day++)
{
int dayMask = 1 << day;
bool isSelected = (selected & dayMask) != 0;
}
要选择日期,您可以使用以下代码:
Int32 toSelect = 0;
// select day 1
toSelect = toSelect | (1 << 1);
// select day 3
toSelect = toSelect | (1 << 3);
// select day 31
toSelect = toSelect | (1 << 31);