2014-01-28 61 views
0

我是一個JavaScript代碼猴子,所以這對我來說是處女地。使用未指定長度的位的字符串(數組?)

我有都只是零和一兩個「字符串」:

var first = "00110101011101010010101110100101010101010101010"; 
var second = "11001010100010101101010001011010101010101010101"; 

我想執行按位&(我從來沒有合作過之前),以確定是否有任何索引,其中,1出現在兩個字符串中。

這些可能是非常長的字符串(數千個字符)。我想將它們作爲數字加在一起,然後轉換爲字符串並檢查2,但javascript無法保持大的精度,並且我將數字取回爲像"1.1111111118215729e+95"這樣的字符串,這對我來說並沒有什麼好處。

我可以採取兩個未指定長度的字符串(它們可能不是相同的長度),並以某種方式使用按位&來比較它們嗎?

我已經建立了循環每個字符的解決方案,但1001^0110會引起我作爲主要的性能升級。請不要給JavaScript循環解決方案作爲答案,這個問題是關於使用按位運算符。

+0

如果你會問一個問題,我不會告訴回答者,如果他們給出一個特定的答案,你就會低估他們,特別是如果答案可能是最好的答案 – scrblnrd3

+0

@ scrblnrd3,除非我有很多人建議完全不相關的答案,當我走出一個功能異常應用程序的肢體 - 即「正常」的解決方法。認爲這是公平的警告。 –

+0

儘管如此,仍然存在使用循環的問題,因爲您提出了有關按位的問題? – scrblnrd3

回答

1

正如你已經注意到你自己,JavaScript的能力有限,如果它是關於整數值。你將不得不把你的琴絃切成「可食用」的部分,並通過他們的方式工作。由於parseInt函數()函數接受鹼,可以64個字符轉換爲一個8字節INT(或32到一個4字節int)和使用和操作者來測試組比特(if (a & b != 0)

+0

我建議通過基準測試來找出它是否比遍歷字符更快。我有我的懷疑。 – JLRishe

+0

我也是如此。原始問題不包括循環方法。很簡單:取一個字符串並遍歷它。只要你點擊「1」,測試另一個字符串。如果解釋器非常慢並且內置的轉換功能很快,上述方法只會更快。 – Ronald

+0

@JLRishe當我爲我的場景構建完整功能時,我將進行基準測試。轉換函數肯定是這裏的通配符 - 實際的匹配應該快得多。 –

-1
var first = "00110101011101010010101110100101010101010101010010001001010001010100011111", 
    second = "10110101011101010010101110100101010101010101010010001001010001010100011100", 
    firstInt = parseInt(first, 2), 
    secondInt = parseInt(second, 2), 
    xorResult = firstInt^secondInt, //524288 
    xorString = xorResult.toString(2); //"10000000000000000000" 
+0

如果字符串長度爲數千個字符,提交者聲明爲必需字符串,則這不起作用。 – JLRishe