按位运算符如何工作?

时间:2017-01-15 23:03:25

标签: javascript bitwise-operators

所以我在codewars.com上遇到了一些问题,我遇到了一个基本加密问题(https://www.codewars.com/kata/basic-encryption/javascript)。目标是获取一个字符串值并将其x值移到ASCII图表的右侧。

这是我最初的解决方案:

function encrypt(text, rule) {
    let res = ''
  for(let i = 0; i<text.length; i++) {
    res += (String.fromCharCode(text.charCodeAt(i)+rule))
  }
  return res
};

然而,它没有通过所有的测试,所以我查看了解决方案,这就是让我通过测试的原因:

function encrypt(text, rule) {
    let res = ''
  for(let i = 0; i<text.length; i++) {
    res += (String.fromCharCode(text.charCodeAt(i)+rule & 255))
  }
  return res
};

所有因为添加了& 255,有人可以通过添加使我的代码有效来向我解释真正改变了什么吗?

1 个答案:

答案 0 :(得分:2)

如上所述,您的有效字符范围是0到255.有许多方法可以验证这种情况,但bitwise and看起来最短。

  

按位AND在每个位的位置返回一个,两个操作数的相应位都是1。

例如:

1111 & 0000会返回0000

1111 & 0001会返回0001

1111 & 0010会返回0010

1111 & 0100会返回0100

但是,正如你可以在文档中看到的那样:

  

按位运算符对此类二进制表示执行操作,但它们返回标准JavaScript数值。

如果在整数上使用此运算符,则会得到整数而不是二进制。

在您的情况下,使用number & 255可确保结束值的范围为0到255.

您可以阅读有关按位运算符there的更多信息。