首页 > 编程语言 >Java中的位运算符介绍

Java中的位运算符介绍

时间:2023-11-21 12:00:23浏览次数:35  
标签:Java 运算 示例 介绍 运算符 按位 result

一、Java中的位运算符

Java提供了6种基本的位运算符,它们用于直接操作二进制数位,分别是:

  1. 位与运算符(&)

    • 作用: 对两个数的每一位执行与操作,只有在对应位都为1时结果才为1。
    • 示例:
      1 int result = 5 & 3; // Result: 1 (0b0101 & 0b0011)
  2. 位或运算符(|)

    • 作用: 对两个数的每一位执行或操作,只要对应位有一个为1,结果就为1。
    • 示例:
      1 int result = 5 | 3; // Result: 7 (0b0101 | 0b0011)
  3. 位异或运算符(^)

    • 作用: 对两个数的每一位执行异或操作,相同为0,不同为1。
    • 示例:
      1 int result = 5 ^ 3; // Result: 6 (0b0101 ^ 0b0011)
  4. 位非运算符(~)

    • 作用: 对一个数的每一位执行非操作,0变1,1变0。
    • 示例:
      1 int result = ~5; // Result: -6 (11111111111111111111111111111010 in 32-bit representation)
  5. 左移运算符(<<)

    • 作用: 将一个数的所有位向左移动指定的位数,右侧用0填充。
    • 示例:
      1 int result = 5 << 2; // Result: 20 (0b0101 << 2)
  6. 右移运算符(>>)

    • 作用: 将一个数的所有位向右移动指定的位数,左侧用符号位填充(正数用0,负数用1)。
    • 示例:
      1 int result = 5 >> 1; // Result: 2 (0b0101 >> 1)

二、位运算的应用场景

  1. 设置标志和掩码位: 使用位运算方便地设置和清除数字的特定位,对程序状态进行编码和标记。

  2. 读取、修改二进制数位: 直接读取、修改数字的一个或多个位,例如用于开关状态的控制。

  3. 加密和解密算法: 在各种加密算法如DES、AES中大量使用位运算进行数据处理。

  4. 数据压缩: 通过位运算实现按位数据压缩,例如压缩图片文件。

  5. 更快速算术运算: 利用位移和按位或可以实现更高效乘法和除法的操作。

  6. 颜色编码: RGB颜色编码通常以按位编码的32位整数表示,方便处理颜色信息。

  7. 优化与替代条件判断: 位运算可以代替某些条件判断语句,提高执行效率。

三、位运算的性质与规律

  1. 按位与运算性质:

    • 交换律:a & b == b & a
    • 结合律:(a & b) & c == a & (b & c)
    • 幺元律:a & 0 == 0
  2. 按位或运算性质:

    • 交换律:a | b == b | a
    • 结合律:(a | b) | c == a | (b | c)
    • 幺元律:a | 1 == 1
  3. 按位异或运算性质:

    • 交换律:a ^ b == b ^ a
    • 结合律:(a ^ b) ^ c == a ^ (b ^ c)
    • 零元素规律:a ^ a == 0
  4. 按位非运算性质:

    • 重点律:~(~a) == a
    • 自反性:a & ~a == 0

四、位运算的优先级

  Java中,位运算符的优先级低于算术运算符,但高于关系运算符和赋值运算符。相同优先级按照从左至右的顺序计算。(红色字体位踩过的坑)

五、使用注意事项

  1. 了解整型数据在内存中的二进制表示形式。
  2. 注意数据溢出问题。
  3. 测试用例要全面。
  4. 使用时需分析算法的逻辑正确性。

以上内容基本概括了Java中位运算的主要知识点。如有不符或者可以补充的,请留言!

标签:Java,运算,示例,介绍,运算符,按位,result
From: https://www.cnblogs.com/woju/p/17846320.html

相关文章

  • 用java框架spring boot写一个文件上传
    在SpringBoot中,实现文件上传可以使用SpringFramework提供的MultipartResolver。以下是一个简单的SpringBoot文件上传示例:在POM文件中添加以下依赖:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></depend......
  • JAVA之List过滤
    List过滤的三种方式:通过java8中filter过滤器进行过滤通过For循环遍历过滤通过ForEach遍历过滤publicclassFilteringList{/***通过java8中filter过滤器进行过滤*@paramuserList*@return*/publicList<User>filterByStream(List......
  • Spring_2023_11_21_1 使用javaConfig实现DI
    Spring_Aop2023_11_21_1使用javaConfig实现DIjavaConfig,是在Spring3.0开始从一个独立的项目并入到Spring中的。javaConfig可以看成一个用于完成Bean装配的Spring配置文件,即Spring容器,只不过该容器不是XML文件,而是由程序员使用java自己编写的java类。一个类中......
  • 开发中遇到的问题总结---java中list和Collection之间的转换
    问题描述:将map中的values转换为list错误做法:强制转换(会报错)List<String>originalContractCodeList=(List<String)kpmcKpidMap.values();正确做法:List<String>originalContractCodeList=newArrayList<>(kpmcKpidMap.values());......
  • JavaScript-触摸操作
    触摸操作概述浏览器的触摸API由三个部分组成。Touch:一个触摸点TouchList:多个触摸点的集合TouchEvent:触摸引发的事件实例Touch接口的实例对象用来表示触摸点(一根手指或者一根触摸笔),包括位置、大小、形状、压力、目标元素等属性。有时,触摸动作由多个触摸点(多根手指)组成,多个触摸点的......
  • 【devops】【介绍】
    @目录写在前面devops解题难度参考资料dockerkuberneteshelmk3sdevops写在前面相关博文个人博客首页免责声明:仅供学习交流使用!开源框架可能存在的风险和相关后果将完全由用户自行承担,本人不承担任何法律责任。devops过程含义工具plan项目立项code代码......
  • java向 jni传递问文件指针
    1、创建fd,jni接口publicstaticnativeintopenFileFromNative(FileDescriptorfileDescriptor);2、java文件获取文件指针ParcelFileDescriptorpfd==getContentResolver().openFileDescriptor(filePathUri,"rw");FileDescriptorfd=pfd.getFileDescriptor()......
  • javap获取jni 对应数据类型
    先用javac生成*.class文件,然后javap-cCallJni.class更多帮助:javap-help......
  • Android studio使用javadoc生成 api 说明文档
    文章目录1、工具下载2、实用工具添加注释3、使用该工具生成api文档4、查看生成的api文档5、帮助1、工具下载2、实用工具添加注释官方wikiTogeneratejavadocsforactiveelementpress“shift+alt+G”.Togeneratejavadocsforallelementsincurrentjavafilepre......
  • Java开发工程师的前景:掌握未来的关键
    随着科技的飞速发展,Java开发工程师在当今的IT领域扮演着越来越重要的角色。Java作为一种强大的编程语言,被广泛应用于企业级应用、移动应用、Web应用等多个领域。在这个充满竞争的时代,掌握Java技术等于掌握了开启未来大门的钥匙。一、Java的稳定性和广泛性Java自1995年问世以来,一直......