无论说是在哪一门计算机语言,位操作运算对于计算机来说肯定是最高效的,因为计算机的底层是按就是二进制,而位操作就是为了节省开销,加快程序的执行速度,以及真正的实现对数的二进制操作。

     使用位操作,很多代码看起来会很简洁,并且执行速度也会随之提高。在大多数编程语言中都会有 << 和 >>

这两个符号向左的就是左移,反之则是右移这个符号的左边就是需要操作的数,而右边就代表了对这个数移动多少位。

1.具体位操作

  1. 左移( << ):

    左移几位就是将这个数再乘以2的几次方,例如说 4 << 2 其结果就是16,也就是将这个数化作为2进制的数然后向左移动两位,最右边的空位就补0.
  2. 右移( >> ):

    右移就刚好相反,但是也不是完全一样,他是向右移动 n 位,如果说这个数本来就是正的,那么和左移刚好相反就直接除以 2 的 n 次方位,但是如果是负数的话在这个数向右移动 n 位后我们在前面的空位补的是 0 。也就是右移的话是与数相关的问题。右移一个很明显的应用就是在二分法的时候我们就可以直接右移一位,显然速度会提高。
  3. 超级右移( >>> ):

    刚刚说了右移其实还是需要按照情况来的,有时候就不一定是正数,我们就可能补 1 ,但是我们期望结果就是这个数除以 2 的 n 次方,我们就可以使用这个无视正负号的右移操作 >>> ,也就是说他是在任何情况下都是给最高位添加 0 。
  4. 与操作( & ):

    与操作就是把两个数转化为二进制的数,然后再把这两个数,从最低位每位对其,同 1 结果为 1 否则全为 0。
  5. 或操作( | ):

    操作同上只是这个是同 0 为 0,其他都是1。
  6. 取反操作( ~ ):

    二进制的0 变 1 , 1 变 0。
  7. 异或( ^ ):

    异或有一条很重要的性质,用的非常多就是一个数异或同一个数两次结果还是那个数。

上面的与或操作会发现他们有单符号的还有双符号的,不要搞混了单符号的不仅仅就是位操作,他们还是逻辑操作,而双符号的仅仅就是逻辑操作。并且他们有区别例如 & 和 && 当他们都作为逻辑操作的,前者就是对一个表达式一直判断完毕才会出现他的值,而后者则是判断一半如果知道为假或真他就不再判断了,这也就是我们看到的大多数的 if 判断中是用的双与,而非单与。

2.实际应用:

  1. 第一个就是两个数交换,这个一般有三种方式:

    第一个:临时变量
int i=3,j=8,temp=0;
temp=i;
i=j;
j=temp;

第二个:使用加减法

int i=3,j=8;
i=j+i;
j=i-j;
i=i-j;

第三个:位操作

int i=3,j=8;
i=i^j;
j=i^j;
i=i^j;

这个地方就是用了异或的重要性质

  1. 第二个就是进制转换了:

    基本思路就是先把数转为二进制的数,然后如果要 16 进制那么就4位取,8进制3位取,但是又怎么取这个4位或者3位呢,这里与操作就能派上用场取四位我们可以直接与上 15 ,三位就是 7 了,例如:
int num=60;
int n1=num & 15;
int tmp=num >>> 4;
int n2=tmp & 15;
System.out.println("n1: "+n1+" n2 "+n2);

Java位操作的更多相关文章

  1. Java位操作全面总结

    转载: Java位操作全面总结 在计算机中所有数据都是以二进制的形式储存的.位运算其实就是直接对在内存中的二进制数据进行操作,因此处理数据的速度非常快.在实际编程中,如果能巧妙运用位操作,完全可以达到 ...

  2. JAVA 位操作学习

    一,基础知识 计算机中数值的编码方式中,原码.反码.补码. 正数的补码与原码相同,负数的补码为:负数的原码符号位不变,其它位取反,再加1. 在计算机中,数值是以补码的形式存储的.补码的好处: ①用补码 ...

  3. Java位操作全面总结[ZZ]

    Java位操作全面总结 在计算机中所有数据都是以二进制的形式储存的.位运算其实就是直接对在内存中的二进制数据进行操作,因此处理数据的速度非常快.在实际编程中,如果能巧妙运用位操作,完全可以达到四两拨千 ...

  4. java 位操作 bitwise(按位) operation bit

    java 位操作 bitwise(按位) operation bit //一篇对于 原码 反码 补码 的介绍 http://www.cnblogs.com/zhangziqiu/archive/201 ...

  5. 一道面试题与Java位操作 和 BitSet 库的使用

    前一段时间在网上看到这样一道面试题: 有个老的手机短信程序,由于当时的手机CPU,内存都很烂.所以这个短信程序只能记住256条短信,多了就删了. 每个短信有个唯一的ID,在0到255之间.当然用户可能 ...

  6. java 位操作的总结

    2014-05-07 17:14 今天工作上需要一个Byte的低5位,高3位.所以查询了资料.总结下如何实现 百度到一个资料: 介绍的很详细 基础知识: http://www.blogjava.net ...

  7. java位操作总结

    在计算机中所有数据都是以二进制的形式储存的. 位运算其实就是直接对在内存中的二进制数据进行操作,因此处理数据的速度非常快. 方便演示,首先写个二进制打印方法: private static void ...

  8. 可能是最通俗易懂的 Java 位操作运算讲解

    https://blog.csdn.net/briblue/article/details/70296326

  9. 通俗易懂的 Java 位操作运算讲解

    所有数值都是2进制 软件开发者都知道 10 进制.16 进制.8 进制. 比如数字 10 的各位进制形式表现如下. 十进制:10 八进制:012 十六进制:0x0a 二进制:1010 原码 反码 补码 ...

随机推荐

  1. [leetcode-625-Minimum Factorization]

    Given a positive integer a, find the smallest positive integer b whose multiplication of each digit ...

  2. JVM总结之内存区域

    Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,有的区域是线程共享的,有的区域是线程隔离的.如下图: 程序计数器 程序计数器(Progra ...

  3. C#基础:.NET环境下WebConfig的加密

    在将ASP.NET项目部署到服务器上时,内网环境下Web.Config往往是直接复制过去.对于外网环境,则需要对Web.Config文件进行加密. .NET环境下一共提供了2种方式的加密功能,分别是D ...

  4. Windows10 Enterprise版本周年更新问题

    安装Windows10的时候,蛋疼选择了企业版本,导致后来周年更新遇到了蛋疼的问题. 首先是无法接收到周年更新的推送.记得首个周年更新的时候,等了大半年都没有.后来使用了易升进行更新,可以检测到,但是 ...

  5. accp8.0转换教材第8章JavaScript对象及初识面向对象理解与练习

    JavaScript数据类型,对象,构造函数,原型对象,初识原型链,对象继承 一.单词部分 ①object父类②constructor构造函数③instance实例④call调用 ⑤apply应用⑥c ...

  6. 最长非降子序列的O(n^2)解法

    这次我们来讲解一个叫做"最长非下降子序列"的问题及他的O(n^2)解法. 首先我们来描述一下什么是"最长非下降子序列". 给你一个长度为n的数组a,在数组a中顺 ...

  7. hdfs文件系统架构详解

    hdfs文件系统架构详解 官方hdfs分布式介绍 NameNode *Namenode负责文件系统的namespace以及客户端文件访问 *NameNode负责文件元数据操作,DataNode负责文件 ...

  8. .net core建站踩坑记录

    系统:win10 VS版本:2017 .NET Core 版本: 1.1 零.读取配置文件 参考:http://www.tuicool.com/articles/QfYVBvi 此版本无需添加其他组件 ...

  9. JavaWeb 后端 <七> 之 mvc3层架构

  10. MongoDB数据库聚合

    前面的话 聚合操作主要用于对数据的批量处理,将记录按条件分组以后,然后再进行一系列操作,例如,求最大值.最小值.平均值,求和等操作.聚合操作还能够对记录进行复杂的操作,主要用于数理统计和数据挖掘.在 ...