今天,我从老人那里管理一些代码。 test1的值是从db加载的,我将尝试简化如下操作。
$(document).ready(function () {
$("#checkWeekday").click(function () {
checkWeekday();
})
});
function GetRepeatDOWs(_RepeatDOWs) {
let WeekDay = [];
if ((_RepeatDOWs & 1) != 0) {
WeekDay.push(0);
}
if ((_RepeatDOWs & 2) != 0) {
WeekDay.push(1);
}
if ((_RepeatDOWs & 4) != 0) {
WeekDay.push(2);
}
if ((_RepeatDOWs & 8) != 0) {
WeekDay.push(3);
}
if ((_RepeatDOWs & 16) != 0) {
WeekDay.push(4);
}
if ((_RepeatDOWs & 32) != 0) {
WeekDay.push(5);
}
if ((_RepeatDOWs & 64) != 0) {
WeekDay.push(6);
}
return WeekDay;
}
function getWeekday(val) {
switch (val) {
case 0:
console.log('Sunday');
break;
case 1:
console.log('Mon');
break;
case 2:
console.log('Tuesday ');
break;
case 3:
console.log('Wen');
break;
case 4:
console.log('Thur');
break;
case 5:
console.log('Fri');
break;
case 6:
console.log('Sat');
break;
}
}
function checkWeekday() {
let check = parseInt($("#test1").val());
var a = GetRepeatDOWs(check);
for (i = 0; i < a.length; i++) {
getWeekday(a[i]);
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type ="text" id ="test1" value='127'>
<input type ="button" id="checkWeekday" value="test">
从上面的代码中您可以看到:数字127在每周的全天都处于开启状态,数字3在星期日和星期一处于开启状态,它是如何工作的?数据库中存储了什么数学数据?
答案 0 :(得分:2)
if ((_RepeatDOWs & 1) != 0)
检查_RepeatDOWs
中的最低位是否为1
。
if ((_RepeatDOWs & 2) != 0)
检查_RepeatDOWs
中的第二位是否为1
。
...
if ((_RepeatDOWs & 8) != 0)
检查_RepeatDOWs
中的第四位是否为1
。
以此类推。
答案 1 :(得分:1)
&
是按位AND运算符。它逐位比较值(32位二进制)。对于两个值都为1的每个地方,输出为1,如果两个值都为0或一个为0,而另一个值为1,则输出0。
例如:
8的二进制文件是:1000
12的二进制文件是:1100
将这两个值进行比较,我们看到两个值中只有最左边的数字是1。
结果是1000
或8。
// show binary of 8
console.log( (8 >>> 0).toString(2) );
// show binary of 12
console.log( (12 >>> 0).toString(2) );
// show result of 8 & 12
console.log( 8 & 12 );
答案 2 :(得分:1)
这是位设置的非常简单的实现。 https://en.m.wikipedia.org/wiki/Bit_array
您不会看到这类低端黑客最近使用了很多。调制解调器代码将改用Set
。
位集数据结构最多可以将n个项的集合表示为n个位,其中“ on”(或1)位对应于存在的项。如果该位为OFF(0),则该项目不存在。从数字上说,一位是2的幂:第一项是1,第二项是2,然后是4、8、16,依此类推。
按位与运算可计算两个集合的交集(“两个集合中都存在什么项目”)。同样,OR会计算并集(“至少一组中存在什么项目”)。
在找到的代码中,项目是星期几。有7天,因此您需要7位。星期日和星期一的集合通常为1 + 2 = 3。一周中所有天的集合是1 + 2 + 4 + 8 + ... + 64 = 127。
答案 3 :(得分:1)
一些值得思考的例子
document.write('127 ->', (127).toString(2),'<br>')
document.write('0b1111111 ->', (0b1111111).toString(10),'<br>')
document.write('1 ->', (1).toString(2),'<br>')
document.write('2 ->', (2).toString(2),'<br>')
document.write('4 ->', (4).toString(2),'<br>')
document.write('8 ->', (8).toString(2),'<br>')
document.write('16 ->', (16).toString(2),'<br>')
document.write('127 & 4 ->', (127 & 4).toString(2),'<br>')
document.write('0b1111011 & 4 -> ', (0b1111011 & 4).toString(2),'<br>')
document.write('0b1111011 | 4 -> ', (0b1111011 | 4).toString(2),'<br>')