什么(int&1)!= 0

时间:2020-03-25 02:49:50

标签: javascript jquery

今天,我从老人那里管理一些代码。 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在星期日和星期一处于开启状态,它是如何工作的?数据库中存储了什么数学数据?

4 个答案:

答案 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>')