所以我在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
,有人可以通过添加使我的代码有效来向我解释真正改变了什么吗?
答案 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的更多信息。