位运算
2018-09-23 本文已影响3人
放开那个BUG
一般位运算的题目都是神仙题,靠平时的积累。
一般位运算常见的操作符有:
& :按位与
| :按位或
^ :按位异或
~ :取反
<< :左移右侧补0
:右移左侧补符号位
:右移左侧补0
案例1
本题既涉及到位运算,又涉及到大数据。
如果要检查一个URL=a是否在集合里,只需要通过k个哈希函数计算,然后在bitarray中找到相应的位置,如果有一个不为黑,那么就不在集合里。只有所有的都为黑,才在集合里,但是有可能会产生误判。
布隆过滤器的真实错误率应该这样计算,可以看出,比原来的0.01%还要小。
案例2
案例3
案例4
这里很zhe'ye'j重要的一点是异或满足交换律和结合律,这也就解释了案例1的情况。
案例5
案例6
public static void main(String[] args){
//默认的话text应该大于pw
String text = "我爱北京天安门,哈哈";
String pw = "123bigbang";
StringBuffer text_ = new StringBuffer();// 存储加密后的字符串
StringBuffer textAfter = new StringBuffer();//存储解密后的字符串
for(int i = 0; i < text.length(); i++){
text_.append((char)(text.charAt(i) ^ pw.charAt(i % pw.length())));
}
for(int i = 0; i < text_.length(); i++){
textAfter.append((char)(text_.charAt(i) ^ pw.charAt(i % pw.length())));
}
System.out.println("原始字符串:" + text);
System.out.println("加密后的字符串:" + text_);
System.out.println("解密后的字符串:" + textAfter);
}