java位运算(操作)的使用
位操作是程序设计中对位模式按位或二进制数的一元和二元操作。 在许多古老的微处理器上, 位运算比加减运算略快, 通常位运算比乘除法运算要快很多。 在现代架构中, 情况并非如此:位运算的运算速度通常与加法运算相同(仍然快于乘法运算)
缺点:只能为整型和字符型数据
位运算主要是针对二进制进行的计算操作,其主要有:与 & 、非 !、或 | 、异或 ^ 、左移 > 和 右移 <
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位运算(操作)的使用的更多相关文章
- Java 位运算超全面总结
1.原码.反码.补码 关于原码.反码.补码的相关知识作者不打算在这里长篇大论,相关知识已有别的大佬总结很好了,还请老铁自行 Google,不过有篇知乎回答是作者学编程以来见过对相关知识最通俗易懂,生动 ...
- Java位运算原理及使用讲解
前言日常开发中位运算不是很常用,但是巧妙的使用位运算可以大量减少运行开销,优化算法.举个例子,翻转操作比较常见,比如初始值为1,操作一次变为0,再操作一次变为1.可能的做法是使用三木运算符,判断原始值 ...
- 我们必须要了解的Java位运算(不仅限于Java)
本文原创地址为 https://www.cnblogs.com/zh94/p/16195373.html 原创声明:作者:陈咬金. 博客地址:https://www.cnblogs.com/zh94/ ...
- Java 位运算2-LeetCode 201 Bitwise AND of Numbers Range
在Java位运算总结-leetcode题目博文中总结了Java提供的按位运算操作符,今天又碰到LeetCode中一道按位操作的题目 Given a range [m, n] where 0 <= ...
- Java位运算总结:位运算用途广泛《转》
前天几天研究了下JDK的Collection接口,本来准备接着研究Map接口,可是一查看HashMap类源码傻眼咯,到处是位运算实现,所以我觉得还是有必要先补补位运算知识,不然代码看起来有点费力.今天 ...
- (转)java位运算
转自:http://aijuans.iteye.com/blog/1850655 Java 位运算(移位.位与.或.异或.非) public class Test { public static ...
- Java位运算总结:位运算用途广泛
前天几天研究了下JDK的Collection接口,本来准备接着研究Map接口,可是一查看HashMap类源码傻眼咯,到处是位运算实现,所以我觉得还是有必要先补补位运算知识,不然代码看起来有点费力.今天 ...
- Java位运算经典实例
一 源码.反码.补码 正数的源码.反码.补码相同,例如5: 5的源码:101 5的反码:101 5的补码:101 负数的源码.反码.补 ...
- Java 位运算(移位、位与、或、异或、非)
Java提供的位运算符有:左移( << ).右移( >> ) .无符号右移( >>> ) .位与( & ) .位或( | ).位非( ~ ).位异或( ...
随机推荐
- pytest.11.生成xml格式的测试报告
From: http://www.testclass.net/pytest/report/ pytest有非常友好的命令行报告输出,在做用例开发的时候,这是极好的.然而我们在运行用例后经常会需要将测试 ...
- 常用的几个vagrant命令
$ vagrant init # 初始化 $ vagrant up # 启动虚拟机$ vagrant halt # 关闭虚拟机$ vagrant reload ...
- javac命令和java命令
要知道java是分两部分的:一个是编译,一个是运行. javac:负责的是编译的部分,当执行javac时,会启动java的编译器程序.对指定扩展名的.java文件进行编译. 生成了jvm可以识别的字节 ...
- vue请求拦截
写了很多的vue项目,经常碰到需要做请求拦截的情况,从发请求前的token判断到对返回信息的响应,我自己在不同的阶段是用不同的方式处理的. 入门阶段 记得当时做的第一个项目,是需要在请求头部加入登录是 ...
- folly无锁队列,尝试添加新的函数
1. folly是facebook开源的关于无锁队列的库,实现过程很精妙.folly向队列中添加节点过程,符合标准库中的队列的设计,而取出节点的过程,则会造成多个线程的分配不均.我曾经试着提供一次 取 ...
- maven release版本不自动更新的原因
如果是release版本,首先从本地查找对应的版本,如果有,则使用本地,否则从远程服务器下载. 这也就是为什么我们有时想要去更新release版本的jar包,会发现无法更新,除非删除本地仓库中的版本. ...
- 控件之ReleLayout属性
Android:控件布局(相对布局)RelativeLayout RelativeLayout是相对布局控件:以控件之间相对位置或相对父容器位置进行排列. 相对布局常用属性: 子类控件相对子类控件:值 ...
- 06-001 DependencyInjection 之 LifecycleKind
IApplicationBuilder 里有如下一成员: IServiceProvider ApplicationServices { get; set; } HttpContext 里有如下两个成员 ...
- sas 命令行打开SAS IDE 的代码
"C:\Program Files\SASHome\SASFoundation\9.4\sas.exe" -CONFIG "C:\Program Files\SASHom ...
- 2-java内省机制(Introspector)
来一个简单的示例吧 package com.my.test; import java.beans.BeanInfo; import java.beans.Introspector; import ja ...