2016-08-12 38 views
2

給定2個相同長度的二進制字符串ab(例如111000110000),是否有可能使用按位運算來檢查b中的所有設置位是否也設置在a中?在上面的例子中,b = 110000在位置1和2(從左到右)有兩個設定位,這些位也在a = 111000中設置。如何確定一個數字中的所有設置位是否也設置爲另一個數字?

我可以在字符方面比較兩個字符串,但這會太慢。我知道我可以將字符串轉化爲類似Integer.parseInt(a, 2);的數字,但我不知道用於完成任務的按位操作。

+1

我想爲明確而具體的問題而努力,並且期待這樣一個容易研究的問題。 – shmosel

+0

爲什麼逐字比較太慢?當然,它必須循​​環的東西,但然後將它們解析爲整數.. – harold

回答

7

掩蓋位,然後檢查它們是否仍然全部設置。

int a = 0b111000; 
int b = 0b110000; 

if ((a & b) == b) { 
    ... 
} 
+1

OP的輸入是字符串,而不是數字,所以你的答案應該覆蓋解析。您還應該覆蓋非常大的「二進制字符串」,即65位*(提示:'BigInteger')*。 – Andreas

+0

如果需要,您可以編寫該答案。 OP已經知道如何將字符串轉換爲數字,並且65位以上的數字是罕見的。 –

+0

@Andreas他應該實際上標記爲'NullPointerException'問題被標記爲相同方式的副本。 「*我知道我可以用Integer.parseInt(a,2); **這樣的字符串變成數字,但我不知道用來完成任務的按位操作。」***「這些信息已經存在這裏已經涵蓋了許多其他問答。 OP不是在鼓勵研究,而是用勺子舀,這讓我看到來自擁有10萬名聲譽的人。 –

0

只是比較字符:

for (int pos = 0; (pos = b.indexOf('1', pos)) != -1; ++pos) { 
    if (a.charAt(pos) != '1') { 
    return false; 
    } 
} 
return true; 

b.indexOf('1', pos)會發現在b下一個1pos位置開始;只需檢查a中的相應字符是否也是1

相關問題