Javascript 从总数中查找周数的公式

Javascript 从总数中查找周数的公式,javascript,formula,Javascript,Formula,任何人请帮助我确定以下示例中的公式或数学术语 Predefined sets stored in the system, 1 = Monday 2 = Tuesday 4 = Wednesday 8 = Thursday 16 = Friday 32 = Saturday 64 = Sunday. From the Total i need to retrieve the days from the predefined set, like, Eg: 1 127 = This me

任何人请帮助我确定以下示例中的公式或数学术语

Predefined sets stored in the system,
1 = Monday 
2 = Tuesday 
4 = Wednesday 
8 = Thursday 
16 = Friday 
32 = Saturday
64 = Sunday.

From the Total i need to retrieve the days from the predefined set, like,

Eg: 1
127 = This means i have to take All Days in the week from the predefined sets.

Eg: 2
80 = This means i have to take Friday and Sunday only

Eg: 3
7 = This means i have to take Monday, Tuesday and Wednesday.

提前谢谢。

我想在评论中加上它,但还没有名声

为了解决这个问题,你可以看看二进制索引

它们是2的幂,例如:

2^0=1 2^1 = 2 2^2=4

通过计算2^2之前的所有数字,可以得到3,也就是2^2-1,因此可以通过添加这些数字来区分日期的所有组合

相反的诀窍是不断减去仍然比要求的数字小的最高数字,并不断重复。你可以用day值取一个a,然后取这一天

常数 天={星期一:1,星期二:2,星期三:4,星期四:8,星期五:16,星期六:32,星期日:64}, getDays=value=>Object.keysdays.filterday=>value&days[day]; console.loggetDays127;//整天 console.loggetDays80;//星期五、星期日 console.loggetDays7;//星期一、星期二、星期三
.作为控制台包装{max height:100%!important;top:0;}Java 9和更高版本的解决方案,因为我知道Java和JavaScript解决方案都会有所帮助。首先我们需要

private static final Map<DayOfWeek, Integer> dayBits = new EnumMap<>(
        Map.of(DayOfWeek.MONDAY, 0x1, DayOfWeek.TUESDAY, 0x2, 
                DayOfWeek.WEDNESDAY, 0x4, DayOfWeek.THURSDAY, 0x8,
                DayOfWeek.FRIDAY, 0x10, DayOfWeek.SATURDAY, 0x20,
                DayOfWeek.SUNDAY, 0x40));
那我们就可以做了

    int total = 80;
    Set<DayOfWeek> days = Stream.of(DayOfWeek.values())
            .filter(dow -> (total & dayBits.get(dow)) > 0)
            .collect(Collectors.toCollection(() -> EnumSet.noneOf(DayOfWeek.class)));
    System.out.println(days);
我们得到的结果是

[星期五、星期日]

后一个代码段也可以在Java8中使用,只是您需要一种更冗长的初始化映射的方法

您可能已经注意到,数字1、2、4、8等表示二进制数的位。1是二进制的00000001,2是00000010,4是00000100,等等。所以我们的任务是找出设置了总数中的哪些位。127是01111111,所有七位都已设置。80是01010000,设置了星期五和星期天的位。要确定是否设置了位,请使用单个&运算符。如果包括星期一,total&1将产生1,如果不包括,则产生0。同样地,如果周二包含,则总计&2将产生2,如果不包含,则产生0

我更喜欢读写十六进制的位常量,比如0x20。因为0b0010_0000太长了,从32开始就不清楚设置了哪个位,除非你非常擅长二进制数,而且你不应该期望每个读你程序的人都是


当然,除了内置的DayOfWeek枚举之外,我做梦也不会想到将一周中的几天表示为其他任何东西。

Java或JavaScript?这些是非常不同的语言。用于混合或本地应用程序。任何人都会有帮助。如果包括星期一,合计&1将产生1,如果不包括,则产生0。类似地,如果周二包含0,则totel&2将产生2。@shyammtp最有可能的原因是缺乏研究工作和/或声誉超过1000的糟糕格式。我想这个问题应该被封闭得太宽泛了……这是可行的,但是你得到的结果是相反的。这是真的,但是反转是一个相对简单的操作,并且在问题中没有指定顺序是重要的: