Java位运算符详解

在Java中,位运算符是对二进制位进行操作的运算符。位运算符可用于位操作,位操作可以用于优化计算机程序的处理速度。

一、位运算符的种类

Java中共有6个位运算符:

  • & 按位与:对两个数的二进制进行按位与操作,只有都为1时,结果才为1。
  • | 按位或:对两个数的二进制进行按位或操作,只要有一个为1时,结果就为1。
  • ^ 按位异或:对两个数的二进制进行按位异或操作,不同为1,相同为0。
  • ~ 按位取反:对一个数的二进制进行按位取反,0变为1,1变为0。
  • > 右移:将一个数的二进制按照指定位数向右移动,超出部分舍弃,空位以符号位补位。
  • << 左移:将一个数的二进制按照指定位数向左移动,超出部分舍弃,空位补0。

二、位运算符的作用

位运算符常用于以下场景:

  1. 将整数转换为二进制或十六进制
  2.     int num = 10;
        //输出二进制形式
        System.out.println(Integer.toBinaryString(num));
        //输出十六进制形式
        System.out.println(Integer.toHexString(num));
        
  3. 对整数进行快速除法或乘法计算
  4.     //等同于num*2^3
        int result = num << 3;
        //等同于num/2^3
        int result = num >> 3;
        
  5. 对数字的某些位进行操作
  6.     //将num的第2位设置为1
        int result = num | 0b10;
        //将num的第4位设为0
        int result = num & ~0b1000;
        

三、注意事项

位运算符操作的对象必须是整型(byte、short、int、long),不能用于浮点型。

对于<>运算,若左操作数是int类型,则移动1~31位的结果为int类型;若左操作数是long类型,则移动1~63位的结果为long类型。

对于>>>运算(无符号位移运算),一律将空缺处补0,即使最左边一位是1也不例外(因此Java不支持无符号整数类型)。

四、实例演示

public class BitwiseOperatorDemo {
    public static void main(String[] args) {
        int a = 60; /* 60 = 0011 1100 */
        int b = 13; /* 13 = 0000 1101 */
        int c = 0;
        c = a & b; /* 12 = 0000 1100 */
        System.out.println("a & b = " + c );
        c = a | b; /* 61 = 0011 1101 */
        System.out.println("a | b = " + c );
        c = a ^ b; /* 49 = 0011 0001 */
        System.out.println("a ^ b = " + c );
        c = ~a; /*-61 = 1100 0011 */
        System.out.println("~a = " + c );
        c = a << 2; /* 240 = 1111 0000 */
        System.out.println("a <> 2; /* 15 = 1111 */
        System.out.println("a >> 2  = " + c );
        c = a >>> 2; /* 15 = 0000 1111 */
        System.out.println("a >>> 2 = " + c );
    }
}

原创文章,作者:PNAH,如若转载,请注明出处:https://www.506064.com/n/132814.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
PNAH的头像PNAH
上一篇 2024-10-03 23:54
下一篇 2024-10-03 23:54

相关推荐

  • Java JsonPath 效率优化指南

    本篇文章将深入探讨Java JsonPath的效率问题,并提供一些优化方案。 一、JsonPath 简介 JsonPath是一个可用于从JSON数据中获取信息的库。它提供了一种DS…

    编程 2025-04-29
  • java client.getacsresponse 编译报错解决方法

    java client.getacsresponse 编译报错是Java编程过程中常见的错误,常见的原因是代码的语法错误、类库依赖问题和编译环境的配置问题。下面将从多个方面进行分析…

    编程 2025-04-29
  • Java Bean加载过程

    Java Bean加载过程涉及到类加载器、反射机制和Java虚拟机的执行过程。在本文中,将从这三个方面详细阐述Java Bean加载的过程。 一、类加载器 类加载器是Java虚拟机…

    编程 2025-04-29
  • Java腾讯云音视频对接

    本文旨在从多个方面详细阐述Java腾讯云音视频对接,提供完整的代码示例。 一、腾讯云音视频介绍 腾讯云音视频服务(Cloud Tencent Real-Time Communica…

    编程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介绍

    本文将详细介绍Java Milvus SearchParam withoutFields的相关知识和用法。 一、什么是Java Milvus SearchParam without…

    编程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java语言中的一个版本,于2014年3月18日发布。本文将从多个方面对Java 8中某一周的周一进行详细的阐述。 一、数组处理 Java 8新特性之一是Stream…

    编程 2025-04-29
  • Java判断字符串是否存在多个

    本文将从以下几个方面详细阐述如何使用Java判断一个字符串中是否存在多个指定字符: 一、字符串遍历 字符串是Java编程中非常重要的一种数据类型。要判断字符串中是否存在多个指定字符…

    编程 2025-04-29
  • VSCode为什么无法运行Java

    解答:VSCode无法运行Java是因为默认情况下,VSCode并没有集成Java运行环境,需要手动添加Java运行环境或安装相关插件才能实现Java代码的编写、调试和运行。 一、…

    编程 2025-04-29
  • Java任务下发回滚系统的设计与实现

    本文将介绍一个Java任务下发回滚系统的设计与实现。该系统可以用于执行复杂的任务,包括可回滚的任务,及时恢复任务失败前的状态。系统使用Java语言进行开发,可以支持多种类型的任务。…

    编程 2025-04-29
  • Java 8 Group By 会影响排序吗?

    是的,Java 8中的Group By会对排序产生影响。本文将从多个方面探讨Group By对排序的影响。 一、Group By的概述 Group By是SQL中的一种常见操作,它…

    编程 2025-04-29

发表回复

登录后才能评论