位运算符&(与)、|(或)、^(异或)、~(非)
左移运算符<<、右移运算符>>
1、实例一
给定字母字符串A和字符串B,判断A是否包含所有字母B。
这题有很多解法,让我们回忆一下,最常用的数组如何解呢。我们维护一个26长度的数组,A....Z对应数组的下表是1...26,每个index对应的取0或1,如果存在即为1,如果不存在即为0。遍历字符A,赋值。遍历字符B,判断数组[B.charAt[i]-'A']==0,true就说明A中不存在该字符。false说明A中存在对应的字符。
说这么多,其实就是我们是否可以将数组中的0,1表示,直接用一个整数来代替呢。答案是可以的。
boolean BitComparator(String s1,String s2)
{
int hash=0;
for(int i=0;i<s1.length();i++)
{
hash|=1<<(s1.charAt(i)-'A');//将hash值与相应的字符或,
//就相当于用不同的二进制‘位’存储了该数字
}
for(int j=0;j<s2.length();j++)
{
if((hash & (1<<(s2.charAt(j)-'A')))==0)//如果hash值与s2中的字符与的结果为0
//表示该字符表示的二进制‘位’与所有hash
return false; //的‘1’不匹配
}
return true;
}