2017-01-15 16 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文字は255より大きな文字コードを持つことはできません –

+1

実際には、ASCII文字は127より大きいコードを持つことはできません。しかし、ほとんどの場合、 "8ビット" 。この問題は、有効な文字の範囲が0〜255であることを明確に述べているため、その範囲内の任意の文字を取得し、その範囲内の文字のみを返すと予想します。 '&255'は'%256'と同様にそれを確認します。 – jcaron

答えて

1

あなたの有効な文字の範囲は0から255です。この条件を有効にする方法はたくさんありますが、bitwise andは最短のように見えます。

ビット単位のANDは、両方のオペランドの対応するビットが1である各ビット位置に1を返します。例えば

1111 & 00000000

1111 & 00010001

1111 & 0010を返す返す0010

1111 & 0100を返すは0100

を返します

ビット演算子は、バイナリ表現に彼らの操作を実行しますが、それらは標準のJavaScriptの数値を返します。あなたがドキュメントに読み込むことができるよう

しかし、

この演算子を整数に使用すると、バイナリではなく整数が得られます。 number & 255を使用して、あなたの場合は

は、終了値は、あなたはビット演算子 thereについての詳細を読むことができます0〜255

の範囲であろうと、あなたが確認します。

関連する問題