2017-01-15 107 views
0

因此,我在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

提示,ascii字符的charcode不能大於255 –

+1

實際上,一個ASCII字符的代碼不能大於127.但是在大多數情況下,當人們的意思是「8位」時,人們會說「ASCII」 。問題清楚地表明,有效字符的範圍是0-255,所以他們期望的是,您將會使用該範圍內的任何字符,並僅返回該範圍內的字符。 '&255'會確保這一點,就像'%256'一樣。 – jcaron

回答

1

正如上面有人說,你的角色的有效範圍是從0到255有很多方法可以有效的這個條件,但bitwise and看起來像最短的一個。

按位AND在每個位的位置返回一個,其中兩個操作數的相應位爲1。

例如:

1111 & 0000將返回0000

1111 & 0001將返回0001

1111 & 0010將返回0010

1111 & 0100將返回0100

但是,正如你可以在文檔閱讀:

位運算符這樣的二進制表示法執行它們的操作,但他們回到標準的JavaScript數值。

如果在整數上使用此運算符,則會得到整數而不是二進制。

在你的情況下,使用number & 255讓你確保最終值將是範圍從0到255

你可以閱讀更多關於位運算符there