Groovy 从按位总数计算一周中的候选天数

Groovy 从按位总数计算一周中的候选天数,groovy,enums,bit-manipulation,flags,dayofweek,Groovy,Enums,Bit Manipulation,Flags,Dayofweek,我有一个工作日的标志枚举表示,例如: weekdays{ Mon: 1 Tues: 2 Wed: 4 Thurs: 8 Fri: 16 Sat: 32 Sun: 64 } 所以,所有工作日都可以表示为Mon到Friday的值之和 1 + 2 + 8 + 4 + 16 =31 我想做的是解构这个,如果我的值是31,那么我如何向后移动并推断M、T、W、TH、Fri是这个数字的候选天数。你可以在枚举的值中找到 enum Weekdays { Mon(1), Tues(2), Wed(4

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

weekdays{

Mon: 1
Tues: 2
Wed: 4
Thurs: 8 
Fri: 16
Sat: 32
Sun: 64
}
所以,所有工作日都可以表示为Mon到Friday的值之和

1 + 2 + 8 + 4 + 16 =31

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

你可以在枚举的值中找到

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]

您可以在枚举的值中找到

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]

把它转换成一个二进制数,然后看看哪个地方有一个。如果按位AND有某个值,并且一天不为零,那么这一天就在里面,否则就不是了。语法取决于语言,所以也许你可以用它来标记它。好吧,它是groovy,但我对Java或其他任何语言都很满意,我可以自己传输语法:)将它转换成二进制数,然后看看哪些地方有一个如果按位和某个值,一天不是零,那一天就在里面,否则就不是了。语法将取决于语言,因此也许您可以用它来标记它。好吧,它是groovy,但我对Java或任何其他语言都很满意,因为我可以自己传输语法:)