iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >java中位运算的使用示例
  • 586
分享到

java中位运算的使用示例

2023-06-07 23:06:06 586人浏览 泡泡鱼
摘要

这篇文章将为大家详细讲解有关java中位运算的使用示例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。我们知道程序中的所有数在计算机内存中都是以二进制的形式储存的,而位运算就是直接对整数在内存中的二进制位进

这篇文章将为大家详细讲解有关java中位运算的使用示例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

我们知道程序中的所有数在计算机内存中都是以二进制的形式储存的,而位运算就是直接对整数在内存中的二进制位进行操作。比如,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算。

位运算主要有移位运算和逻辑运算。下面我们就分别来讲讲移位运算和逻辑运算。

移位运算:

左移:操作符为<<,向左移动,右边的低位补0,左边高位舍弃,将二进制看做整数,左移1位就相当于乘以2。无符号右移:操作符为>>>,向右移动,右边的舍弃掉,左边补0。有符号右移:操作符为>>,向右移动,右边的舍弃掉,左边补的值取决于原来最高位,原来是1就补1,原来是0就补0,将二进制看做整数,右移1位相当于除以2。

例如:

int a = 4; // 100a = a >> 2; // 001,等于1a = a << 3 // 1000,变为8

逻辑运算有:

  • 按位与 &:两位都为1才为1

  • 按位或 |:只要有一位为1,就为1

  • 按位取反 ~: 1变为0,0变为1

  • 按位异或 ^ :相异为真,相同为假

例如:

int a = ...; a = a & 0x1 // 返回0或1,就是a最右边一位的值。a = a | 0x1 //不管a原来最右边一位是什么,都将设为1

我们来看几个简单的应用场景:

场景一:判断奇偶

分析:奇数都不是2的整数倍,转换成二进制后最低位必然为1,偶数则相反。利用这个特性我们可以很容易的通过位运算判断一个整数的奇偶性。

看代码:

   int i = 1;// 二进制存储方式为00000000000000000000000000000001    int j = 5;// 二进制存储方式为00000000000000000000000000000101    int k = 6;// 二进制存储方式为00000000000000000000000000000110    if ((i & j) == 1) {      System.out.println("j的最低位为1,为奇数");    }    if ((i & k) == 0) {      System.out.println("k的最低位为0,为偶数");    }

场景二:判断一个正整数是不是2的整数次幂

分析:我们先来看一下常见的2的整数次幂的数:2、4、8、16,转化成二进制依次为:10、100、1000、10000,发现规律了没有?那就是除了首位是1,其他全是0。恰巧这些数减去1后等于他们依次按位取反的结果,比如8-1=7,二进制是111,可以通过8的二进制1000按位取反得到。而8&7=0,提取一下规律就是:

(n&(n-1))==0

符合这个规律的n就是2的整数次幂了。

场景三:简单的集合处理

不废话,直接看代码:

public class SimpleSet {  public static final int A = 0x01;// 最后四位为0001  public static final int B = 0x02;// 最后四位为0010  public static final int C = 0x04;// 最后四位为0100  public static final int D = 0x08;// 最后四位为1000  private int set = 0x00;// 初始0000,空集合  public void add(int i) {// 将i对应位的值置为1,重复add不影响。默认传入值为ABCD之一,此处省去边界判断    set |= i;  }  public boolean contain(int i) {// 判断相应位置是否为1    return (set & i) == i;  }  public boolean remove(int i) {// 来不及不解释了快看代码    if (contain(i)) {      set -= i;      return true;    } else {      return false;    }  }}

测试一下:

 public static void main(String[] args) {    SimpleSet set = new SimpleSet();    System.out.println(set.contain(A));    set.add(B);    System.out.println(set.contain(A));    System.out.println(set.contain(B));    set.add(A);    set.add(C);    System.out.println(set.contain(A));    set.remove(A);    System.out.println(set.contain(A));    System.out.println(set.remove(A));    System.out.println(set.contain(C));  }

输出为:

falsefalsetruetruefalsefalsetrue

好的,没有问题。

大家可能会觉得,上面的示例代码中的A、B、C、D有点类似于枚举,事实上jdk源码中的关于枚举的集合类EnumSet使用的就是类似的方案,当然比这个复杂得多,有兴趣的可以去翻一下源码,这个方案它有个名字,叫位向量。

顺便提一句,java中int的包装类Integer里面有很多静态工具方提供位运算操作,且大都十分复杂,感兴趣的可以去看看

结语:

位运算是计算机最擅长的运算,jdk的源码中也大量地使用了它,搞明白它有助于我们更加深入的理解计算机,也有助于我们写出更优雅的代码。

关于“java中位运算的使用示例”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: java中位运算的使用示例

本文链接: https://www.lsjlt.com/news/250411.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java中位运算的使用示例
    这篇文章将为大家详细讲解有关java中位运算的使用示例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。我们知道程序中的所有数在计算机内存中都是以二进制的形式储存的,而位运算就是直接对整数在内存中的二进制位进...
    99+
    2023-06-07
  • java使用布尔运算代替位运算的示例分析
    这篇文章将为大家详细讲解有关java使用布尔运算代替位运算的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。布尔运算代替位运算虽然位运算的速度远远高于算术运算,但是在条件判断时,使用位运算替代布尔运...
    99+
    2023-06-27
  • Java位运算的示例分析
    这篇文章给大家分享的是有关Java位运算的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。位运算表达式由操作数和位运算符组成,实现对整数类型的二进制数进行位运算。位运算符可以分为逻辑运算符(包括~、&、|和...
    99+
    2023-06-02
  • Java 中的位运算与移位运算详解
    位运算和移位运算是 Java 中常用的运算符,用于对数字的位进行操作。下面是位运算与移位运算的详细解释:1. 位运算符:- 按位与(...
    99+
    2023-08-14
    Java
  • 如何在Java中使用位运算
    如何在Java中使用位运算?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、位运算的分类与展现效果java位运算可以分为左移和右移,其中右移还有无符号右移。 j...
    99+
    2023-06-15
  • Java中的位运算与移位运算详解
    目录位运算按位“与” &按位“或” |异或 ^移位运算左移 <<右移 >>无符号右移 >>>总结位运算 按位“与” & ...
    99+
    2024-04-02
  • mysql中运算符的使用示例
    这篇文章将为大家详细讲解有关mysql中运算符的使用示例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。案例:创建数据表tmp15,其中包含varchar类型的字段note...
    99+
    2024-04-02
  • shell中基本计算、逻辑运算、位运算的示例分析
    这篇文章给大家分享的是有关shell中基本计算、逻辑运算、位运算的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。以下面的格式提供运算表达式:$(( expression )) $ echo $((5*(3...
    99+
    2023-06-09
  • Java中的位运算与移位运算有哪些
    本篇内容介绍了“Java中的位运算与移位运算有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!位运算按位“与” &规则: 如果两个...
    99+
    2023-06-22
  • java中移位运算符怎么使用
    Java中的移位运算符有三种:左移位运算符()和无符号右移位运算符(>>>)。它们用于将一个二进制数向左或向右移动指定的位数。1. ...
    99+
    2023-09-26
    java
  • Java中的位运算与移位运算有什么不同
    位运算和移位运算都是Java中常用的操作符,但它们执行的操作是不同的。位运算(bitwise operation)是直接对操作数的每...
    99+
    2023-08-15
    Java
  • c语言中移位运算符的示例分析
    这篇文章主要介绍c语言中移位运算符的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!C语言是什么C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发,使用C语言可以以简易的方式编译、处理低级存储...
    99+
    2023-06-15
  • Java的位运算实例代码分析
    今天小编给大家分享一下Java的位运算实例代码分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。位运算很久以前学习过位运算,...
    99+
    2023-07-06
  • js位运算在实际中使用的实例教程
    目录什么是位运算业务场景:解决办法办法一:办法二:附:位运算的综合应用总结什么是位运算 从现代计算机中所有的数据二进制的形式存储在设备中。即 0、1 两种状态,计算机对二进制数据进行...
    99+
    2024-04-02
  • Java中的位运算符全解
    目录1. &(按位与运算符)2. |(按位或运算符)3. ^(异或运算符)4. <<(左移运算符)5. >> (右移移运算符)6. ~(取反运算符)7...
    99+
    2024-04-02
  • Java中BigDecimal基本运算的示例分析
    小编给大家分享一下Java中BigDecimal基本运算的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!BigDecimal一共有4个够造方法,让来看看其中比较常用的两种用法:第一种:BigDecimal(doub...
    99+
    2023-05-30
    java bigdecimal
  • java中有哪些位运算
    java中有哪些位运算?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开发;...
    99+
    2023-06-14
  • 详解Java的位运算
    目录位运算代码演示代码结果位运算的应用位运算 很久以前学习过位运算,但是很久不用,感觉都忘得差不多了。最近看了几处位运算的代码,发现都看不懂了,哈。也是时候回来补一补基础知识了。 程...
    99+
    2023-05-15
    Java位运算 Java运算
  • 示例讲解php中怎么进行按位运算
    随着计算机技术的飞速发展,位运算已经成为了计算机科学中重要的概念之一。PHP中也不例外,它提供了一组用于进行位运算的函数。本文将详细介绍PHP如何实现按位运算。一、按位与(&)运算按位与运算是指将两个二进制数的对应位上的数值进行“与...
    99+
    2023-05-14
  • PHP中的运算符使用示例详细指南
    目录正文逻辑运算符对布尔值起作用not运算符:2个单数运算符正文 一旦你有了一些变量,你就可以对它们进行运算: $base = 20; $height = 10; $area = $...
    99+
    2022-11-13
    PHP运算符 PHP运算
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作