从按位总数评估一周中的候选日期

时间:2014-11-18 17:11:46

标签: groovy enums bit-manipulation flags dayofweek

我有工作日的标志枚举表示,例如:

weekdays{

Mon: 1
Tues: 2
Wed: 4
Thurs: 8 
Fri: 16
Sat: 32
Sun: 64
}

因此,所有工作日都可以表示为周一至周五的值之和

1 + 2 + 8 + 4 + 16 =31

如果我的值是31,那么我想解释的是,然后如何向后移动并推断出M,T,W,TH,Fri是这个数字的候选天数。

1 个答案:

答案 0 :(得分:3)

你可以找到枚举值

enum Weekdays {
    Mon(1), Tues(2), Wed(4), Thurs(8), Fri(16), Sat(32), Sun(64)
    int bit
    Weekdays(bit) { this.bit = bit }
}

def day = 31
println Weekdays.values().findAll{it.bit&day}
//; [Mon, Tues, Wed, Thurs, Fri]