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

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

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

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

1&1=1

1&0=0

0&1=0

0&0=0

---

001

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

001(结果)

结论1:两个数a和b(0<a<b)相与其结果范围是[0,a],包含0和a

应用场景: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 void main(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(int k, 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;
}

java位运算(操作)的使用的更多相关文章

  1. Java 位运算超全面总结

    1.原码.反码.补码 关于原码.反码.补码的相关知识作者不打算在这里长篇大论,相关知识已有别的大佬总结很好了,还请老铁自行 Google,不过有篇知乎回答是作者学编程以来见过对相关知识最通俗易懂,生动 ...

  2. Java位运算原理及使用讲解

    前言日常开发中位运算不是很常用,但是巧妙的使用位运算可以大量减少运行开销,优化算法.举个例子,翻转操作比较常见,比如初始值为1,操作一次变为0,再操作一次变为1.可能的做法是使用三木运算符,判断原始值 ...

  3. 我们必须要了解的Java位运算(不仅限于Java)

    本文原创地址为 https://www.cnblogs.com/zh94/p/16195373.html 原创声明:作者:陈咬金. 博客地址:https://www.cnblogs.com/zh94/ ...

  4. Java 位运算2-LeetCode 201 Bitwise AND of Numbers Range

    在Java位运算总结-leetcode题目博文中总结了Java提供的按位运算操作符,今天又碰到LeetCode中一道按位操作的题目 Given a range [m, n] where 0 <= ...

  5. Java位运算总结:位运算用途广泛《转》

    前天几天研究了下JDK的Collection接口,本来准备接着研究Map接口,可是一查看HashMap类源码傻眼咯,到处是位运算实现,所以我觉得还是有必要先补补位运算知识,不然代码看起来有点费力.今天 ...

  6. (转)java位运算

    转自:http://aijuans.iteye.com/blog/1850655 Java 位运算(移位.位与.或.异或.非)   public class Test { public static ...

  7. Java位运算总结:位运算用途广泛

    前天几天研究了下JDK的Collection接口,本来准备接着研究Map接口,可是一查看HashMap类源码傻眼咯,到处是位运算实现,所以我觉得还是有必要先补补位运算知识,不然代码看起来有点费力.今天 ...

  8. Java位运算经典实例

    一 源码.反码.补码 正数的源码.反码.补码相同,例如5:            5的源码:101            5的反码:101            5的补码:101 负数的源码.反码.补 ...

  9. Java 位运算(移位、位与、或、异或、非)

    Java提供的位运算符有:左移( << ).右移( >> ) .无符号右移( >>> ) .位与( & ) .位或( | ).位非( ~ ).位异或( ...

随机推荐

  1. Windump教程-参数介绍

    1 应用 Windump是tcpdump的Windows版本,主要的参数如下: -D 列出所有的接口 -i interface 指定用于抓包的接口 -c packetcount 指定抓包的个数 -w ...

  2. 淘宝购买的“公网IP盒子”企业版存在很多问题

    现在罗列了几点问题希望官方尽快能得到解决 1:不支持PPPoE拨号(必须让路由器先拨号后再用这个设备上网)2:不支持双线双IP接入3:配置界面不能设置密码(知道内网IP就可以进了)4:不能代理独立IP ...

  3. tools、site

    notepad editer fiddler 一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的"进出"Fiddler的数据 ...

  4. public class的类名必须跟文件名保持一致吗?

  5. 关于Centos7 firewalld防火墙开放端口后仍不能访问ftp和nginx的问题解决

    我在阿里轻量应用服务器搭建ftp服务器这篇博客中把防火墙换为iptables,因为当时无论我怎么设置firewalld,就是无法访问ftp服务器,今天在翻看其他博客的时候,突然发现firewalld有 ...

  6. version control(关于版本控制)

    版本控制(Version Control Systems)是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统.  这个系统可以自动帮我们备份文件的每一次更改,并且可以非常方便的恢复到 ...

  7. BCGcontrolBar(四) ListCtrl 操作输出显示

    Ribbon 的效果主要为在可停靠面板上放置各种组件 具体操作为新建一个watchbar 然后在watchbar上加入 ListCtrl组件 效果如下 因为是在可停靠面板上生成的 因此可以随意拖动 具 ...

  8. ZooKeeper系列(5):管理分布式环境中的数据

    引言 本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它涉及到了paxos算法.Zab协议.通信协议等相关知 识,理解起来比较抽象所以还需要借助一些应用场景,来帮我 ...

  9. c#数组去重

    第一种: string[] stringArray = { "aaa", "bbb", "aaa", "ccc", &q ...

  10. python装饰器(二)

    有参装饰器 def outer(flag): def timer(func): def inner(*args,**kwargs): if flag: print('''执行函数之前要做的''') r ...