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

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

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

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. 类型转换之 PropertyEditorSupport类

    这个类可以用于自定义的类型转换, 子类继承这个类之后可以重写子类的方法 ,其中比较重要的是setAsText和setValue方法,setAsText 子自己的方式处理转换,setValue将转换的结 ...

  2. 亲测可行,AndroidStudio 究竟如何配置gradle

    一.你不想看到的 Gradle Build Running 话说在天朝当程序员也是很不容易的,不管是查阅资料还是下载东西,很多时候你会发现自己上网姿势不对,当然对大多数程序员来说,这都不是事儿.这次重 ...

  3. 简单的视频采集demo

    打算做个简单的聊天软件,其中一个我没做过的,就是视频采集. 在网上查了许久资料,终于搞清楚了dshow采集视频的流程 参考资料如下: https://msdn.microsoft.com/en-us/ ...

  4. 10.解决VUEX刷新的时候出现数据消失

    通常,我们在使用vue编写页面时,会需要使用vuex在组件间传递(或者说共同响应)同一个数据的变化.例如:用户的登录信息. 下面,我们使用传递用户登录信息的例子来一步步解决这个问题. 首先,我们的第一 ...

  5. 如何利用php+android+新浪sae服务器做一个app下载应用

    功能简介:提供一个app下载的平台,类似于appstore,上面有很多app可供下载 实现基本思路:利用android,在手机桌面建立一个图标,点击该图标不是打开app应用,而是跳转到一个web页面, ...

  6. 程序员必须知道的六大ES6新特性

    二 .字符串扩展 1.传统上,JavaScript只有indexOf方法,可以用来确定一个字符串是否包含在另一个字符串中.ES6又提供了三种新方法. includes():返回布尔值,表示是否找到了参 ...

  7. H3CNE实验:配置基于端口划分的VLAN及Trunk

    配置准备数据 | 设备名称 | IP地址 | VLAN网关 | 接口 | VLAN | |--------------|------------|-------------|----------|-- ...

  8. (转载)Sybase:bcp命令参考

    参考文档: http://blog.csdn.net/wwp1026/article/details/6900569

  9. webpack1 新手入门教程

    本文github仓库地址: https://github.com/Rynxiao/webpack-tutorial ,里面包括了本教程的所有代码. [如果你觉得这篇文章写得不错,麻烦给本仓库一颗星:- ...

  10. 动态数组ArrayList的使用

    1.定义类 package com.realhope.rmeal.bean; /** * * @author Wucy * 菜谱类 */ public class Menu{ private Inte ...