2009-12-01 8 views
10

में उपयोग किए गए अपरिचित वर्ण यहां एक जेएस एन्क्रिप्शन स्क्रिप्ट का एक अंश है जिसका मैं अध्ययन कर रहा हूं।जावास्क्रिप्ट एन्क्रिप्शन स्क्रिप्ट

function permutationGenerator(nNumElements) { 
    this.nNumElements  = nNumElements; 
    this.antranspositions = new Array; 
    var k = 0; 
    for (i = 0; i < nNumElements - 1; i++) 
    for (j = i + 1; j < nNumElements; j++) 
    this.antranspositions[ k++ ] = (i << 8) | j; 
    // keep two positions as lo and hi byte! 
    this.nNumtranspositions = k; 
    this.fromCycle = permutationGenerator_fromCycle; 
} 

किसी को भी एक पाइप के रूप में, डबल कम संकेत से < < के उपयोग की व्याख्या कर सकते रूप में अच्छी तरह | ?

बाद में लिपि में भी संकेतों की तुलना में दोगुनी अधिक होती है >> साथ ही, एकल एम्पर्सेंड & भी।

function permutationGenerator_fromCycle(anCycle) { 
    var anpermutation = new Array(this.nNumElements); 
    for (var i = 0; i < this.nNumElements; i++) anpermutation[i] = i; 
    for (var i = 0; i < anCycle.length; i++) { 
     var nT = this.antranspositions[anCycle[i]]; 
     var n1 = nT & 255; 
     var n2 = (nT >> 8) & 255; // JC 
     nT = anpermutation[n1]; 
     anpermutation[n1] = anpermutation[n2]; 
     anpermutation[n2] = nT; 
    } 
    return anpermutation; 
} 

मैं एकल < या से परिचित> और निश्चित रूप से तार्किक हूँ & & और तार्किक || ।

विचार?

उत्तर

14

बाएं शिफ्ट 8 बिट्स और बिटवाई या जे के साथ।

<< बाएं शिफ्ट ऑपरेटर है। परिवर्तनीय में बिट्स को स्थानांतरित करता है जो संकेतित पदों की संख्या छोड़ देता है।

>> सही शिफ्ट ऑपरेटर है। वैरिएबल में बिट्स को सही स्थिति की संख्या की संख्या में बदल देता है।

| bitwise या ऑपरेटर है। दो ऑपरेंड में लॉजिकल या प्रत्येक बिट पर प्रदर्शन करता है।

& बिटवाई और ऑपरेटर है। दो ऑपरेटरों में एक तार्किक और प्रत्येक बिट पर प्रदर्शन करता है।

8

< < थोड़ा सा बाएं शिफ्ट है। >> थोड़ा सा सही बदलाव है। | थोड़ा सा है या। & थोड़ा सा है और। अधिक जानकारी के लिए कृपया this reference देखें।

12

| = बिटवाइज़ या

1010 
0100 
---- 
1110 

& = बिटवाइज़ और

1011 
0110 
---- 
0010 

तो यह & & और के रूप में ही है || सिर्फ एक बिट के साथ

< <, बाईं बदलाव है तो

< 2 शिफ्टों संख्या दो पदों द्वारा छोड़ा, 011,000 एक और तरीका उपज इस के बारे में सोच करने के लिए दो से गुणा है, इसलिए < < एक्स 1 == एक्स * 2, एक्स < < 2 == x * 2 * 2 और इतने पर, तो यह है x * Math.pow (2, एन) एक्स <
>> 

के लिए विपरीत है, इसलिए 0110> > 2 ---> 0001 आप दो से विभाजन के रूप में इसके बारे में सोच सकते हैं, लेकिन नीचे गोलाई के साथ, तो यह

Math.floor(x/Math.pow(2,n)) 
+0

आप स्पष्ट करने के लिए कि '2^n' का अर्थ है" 2 n घात "चाहते हो सकता है, नहीं" 2 XOR n के बराबर होती है "। –

+0

टिप्पणी के लिए धन्यवाद, इसके बारे में भी सोचा नहीं था। इसे Math.pow में बदल दिया (...) इसे स्पष्ट बनाने के लिए – Zenon

+1

यह एक पुराना धागा है, लेकिन एक * बहुत * उपयोगी उत्तर है। धन्यवाद! – SwankyLegg

संबंधित मुद्दे