java bit操作_java位运算(操作)的使用

位操作是程序设计中对位模式按位或二进制数的一元和二元操作。 在许多古老的微处理器上, 位运算比加减运算略快, 通常位运算比乘除法运算要快很多。 在现代架构中, 情况并非如此:位运算的运算速度通常与加法运算相同(仍然快于乘法运算)

缺点:只能为整型和字符型数据

位运算主要是针对二进制进行的计算操作,其主要有:与  & 、非  !、或|、异或  ^ 、左移  >  和右移  <

1.与  &

使用规律如下:两个操作数中位都为1,结果才为1,否则结果为0,例如:

1&1=1

1&0=0

0&1=0

0&0=0

---

001

101

---------------

001(结果)

结论1:两个数a和b(0

应用场景:hashMap中让hashCode和map数组大小减一进行与操作,得到该key在数组中的位置角标值。

2.异或  ^

结论1:两个相同的数进行异或结果是0

应用场景:storm重arck机制,使用了该操作来判断任务是否完成。

其他:http://wenwen.m.sogou.com/mq/qudetail.jsp?qid=606323001&w=c%E8%AF%AD%E8%A8%80%E7%9A%84%E8%B4%9F%E5%80%BC%E7%9C%8B%E4%B8%8D%E6%87%82&g_ut=3

使用场景:基于位运算的权限设计

http://blog.csdn.net/ajian005/article/details/8490899

百度百科: http://baike.baidu.com/view/379209.htm

实例2:java中使用 byte数组要使用 & oxff 才能进行运算(sonar中的一个bug)相关介绍

http://blog.csdn.net/leonwang_fly/article/details/47422235

public static void main(String[] args) {

byte b=-1;

System.out.println((int)(char)b);

System.out.println((int)(char)(b & 0xff));

}

正如你所看到的:

第1个代码片段的运行结果是:-1

第2个代码片段的运行结果是:65535和255

3、左移(右移)符号

public static voidmain(String[] args) {//左移 2 * 2 的1次方 = 4

System.out.println(2<<1);//右移 2/2的1次方 = 1

System.out.println(2>>1);//无符号右移 2/2的1次方 = 1

System.out.println(2>>>1);//无符号右移 -2/2的1次方 = 2147483647

System.out.println(-2>>>1);

}

用法javaPriorityQueue队列中的排序算法 (此处等同于除以2,但是比除2更加高效)

private void siftUpUsingComparator(intk, E x) {while (k > 0) {

//此处等同于除以2,但是比除2更加高效int parent = (k - 1) >>> 1;

Object e=queue[parent];if (comparator.compare(x, (E) e) >= 0)break;

queue[k]=e;

k=parent;

}

queue[k]=x;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值