Java编程(位运算符)

简介: 二进制运算符  由于计算机内部的数据都以二进制的形式存在,所以在Java语言中提供了直接操作二进制的运算符,这就是下面要讲解的位运算符和移位运算符。  使用二进制的运算符,可以直接在二进制的基础上对数字进行操作,执行的效率比一般的数学运算符高的多,该类运算符大量适用于网络编程、硬件编程等领域。

二进制运算符
  由于计算机内部的数据都以二进制的形式存在,所以在Java语言中提供了直接操作二进制的运算符,这就是下面要讲解的位运算符和移位运算符。
  使用二进制的运算符,可以直接在二进制的基础上对数字进行操作,执行的效率比一般的数学运算符高的多,该类运算符大量适用于网络编程、硬件编程等领域。
  二进制运算符在数学上的意义比较有限。
  在Java代码中,直接书写和输出的数值默认是十进制,Java代码中无法直接书写二进制数值,但是可以书写八进制和十六进制数字,八进制以数字0开头,例如016,十六进制以数字0和x开头,例如0x12,0xaf等等。
  在计算二进制运算时,Java语言的执行环境(JRE)首先将十进制的数字转换为二进制,然后进行运算。如果输出结果的值,则数字会被转换成十六进制进行输出。
  需要注意的是:
  1、正数的机器数是原码,负数的机器数是补码,计算时需要小心。关于二进制和补码的计算可以参看《Java编程那些事儿7——进制的概念》和《Java编程那些事儿8——计算机内部的数据表达》。
  2、整数型的计算结果都是int型,而不管是对byte还是short进行二进制运算。
  位运算符
  Java语言中的位运算符主要有4种:&(位与)、|(位或)、^(异或)和~(按位取反),下面依次介绍运算规则和使用示例。
  l &(AND)
  运算规则:参与运算的数字,低位对齐,高位不足的补零,对应的二进制位都为1,则运算结果为1,否则为0.适用场合:屏蔽数字中某一位或某些位。因为任何数和0与都是0.示例代码:
  int a = 4;
  int b = 10;
  int c = a & b;
  计算过程:
  4的二进制形式为0000 0000 0000 0000 0000 0000 0000 0100
  10的二进制形式为0000 0000 0000 0000 0000 0000 0000 1010
  按照计算规则,结果为0000 0000 0000 0000 0000 0000 0000 0000
  这个数字转换为十进制就是数字0 l | (OR)
  运算规则:参与运算的数字,低位对齐,高位不足的补零,对应的二进制位有一个为1则为1,否则为0.适用场合:将数字中某一位或某些位修改成1.因为1和任何数或都是1.示例代码:
  int a = 4;
  int b = -10;
  int c = a | b;
  计算过程:
  4的二进制形式为0000 0000 0000 0000 0000 0000 0000 0100
  10的二进制形式为1111 1111 1111 1111 1111 1111 1111 0110
  Examda提示: 按照计算规则,结果为1111 1111 1111 1111 1111 1111 1111 0110
  这个二进制数转换为十进制就是数字-10. l ^(XOR)
  运算规则:参与运算的数字,低位对齐,高位不足的补零,对应的二进制位相同为零,不相同为1.适用场合:判断数字对应的位是否相同。
  示例代码:
  int a = 4;
  int b = 10;
  int c = a ^ b;
  计算过程:
  4的二进制形式为0000 0000 0000 0000 0000 0000 0000 0100
  10的二进制形式为0000 0000 0000 0000 0000 0000 0000 1010
  按照计算规则,结果为0000 0000 0000 0000 0000 0000 0000 1110
  这个数字转换为十进制就是数字14 l ~(NOT)
  运算规则:只操作一个数字,将该数字中为1的位变成0,为0的位变成1.适用场合:反转数字的内容示例代码:
  int a = 4;
  int c = ~a;
  计算过程:
  4的二进制形式为0000 0000 0000 0000 0000 0000 0000 0100
  按照计算规则,结果为1111 1111 1111 1111 1111 1111 1111 1011
  这个数字转换为十进制就是数字-5.其实位运算和实际的应该实现保持一致,也就是提供的电路级运算符号,每种运算符都有对应的电路实现。
  实际使用简单示例:
  把任意数字转换为正数
  假设n是一个任意的整数,则把n转换为正数的代码为:
  int m = n & 0x7fffffff;
  判断任意数字倒数第三位的值是否为1假设n是一个任意的整数,则判断的代码为:
  int m = n & 0x4;
  boolean b = (m != 0);
  将任意数字倒数第四位置为
  假设n是一个任意的整数,则代码为:
  int m = n | 0x8;

在Thinking   in   Java第三章中的一段话:

移位运算符面向的运算对象也是二进制的“位”。可单独用它们处理整数类型(主类型的一种)。左移位运算符( < <)能将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0)。“有符号”右移位运算符(> > )则将运算符左边的运算对象向右移动运算符右侧指定的位数。“有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1。Java也添加了一种“无符号”右移位运算符(> > > ),它使用了“零扩展”:无论正负,都在高位插入0。这一运算符是C或C++没有的。
若对char,byte或者short进行移位处理,那么在移位进行之前,它们会自动转换成一个int。只有右侧的5个低位才会用到。这样可防止我们在一个int数里移动不切实际的位数。若对一个long值进行处理,最后得到的结果也是long。此时只会用到右侧的6个低位,防止移动超过long值里现成的位数。但在进行“无符号”右移位时,也可能遇到一个问题。若对byte或short值进行右移位运算,得到的可能不是正确的结果(Java   1.0和Java   1.1特别突出)。它们会自动转换成int类型,并进行右移位。但“零扩展”不会发生,所以在那些情况下会得到-1的结果。

 

目录
相关文章
|
3天前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第3天】在Java编程的世界里,对象序列化与反序列化是实现数据持久化和网络传输的关键技术。本文将深入探讨Java序列化的原理、应用场景以及如何通过代码示例实现对象的序列化与反序列化过程。从基础概念到实践操作,我们将一步步揭示这一技术的魅力所在。
|
5天前
|
Java API 调度
Java 多线程编程详解
《Java多线程编程详解》深入浅出地讲解了Java平台下的多线程核心概念、API使用及最佳实践。从基础理论到实战案例,本书帮助读者掌握并发编程技巧,提升软件开发中的效率与性能,是Java开发者不可或缺的参考指南。
|
3天前
|
Java 程序员 编译器
在Java编程中,if-else与switch语句犹如武林高手的剑与刀
【10月更文挑战第3天】在Java编程中,if-else与switch语句犹如武林高手的剑与刀。本文通过示例展示如何巧妙运用这两种工具,提升代码效率与可读性。从精简if-else结构到高效使用switch语句,再到性能考量,帮助你在不同场景下做出最佳选择,让你的程序更加流畅高效。掌握这些技巧,你将在Java世界中游刃有余!
10 2
|
5天前
|
Oracle Java 关系型数据库
Java编程之旅:从基础到进阶
Java,一种广泛使用的编程语言,因其平台无关性、面向对象的特性而备受推崇。本文旨在通过简明易懂的语言和实际代码示例,引导初学者了解Java的基本概念,并逐步深入到更复杂的编程技巧。我们将从Java的安装开始,经过变量、数据类型、控制结构等基础知识的学习,最后探讨异常处理和文件操作等进阶话题。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的参考和启示。
|
5天前
|
安全 Java 调度
理解 Java 中的多线程编程
本文深入探讨了Java中的多线程编程,涵盖线程创建与管理、同步机制、锁及死锁避免策略。介绍了通过继承`Thread`类或实现`Runnable`接口创建线程的方法,并讨论了线程的生命周期状态。此外,还讲解了如何使用`ExecutorService`线程池以及`java.util.concurrent`包中的工具类来简化并发编程。理解这些概念和技术,有助于开发高效稳定的多线程应用程序。
|
1天前
|
安全 Java 调度
深入理解Java中的多线程编程
【10月更文挑战第5天】 本文将通过通俗易懂的方式,详细解析Java中多线程编程的核心概念和实际应用。我们将从基本概念入手,逐步探讨创建线程、线程同步、线程通信以及线程池的使用等内容。无论是初学者还是有经验的开发者,都能在本文中找到有价值的信息,启发对多线程编程的深层次思考。
|
1天前
|
Java
Java编程中的异常处理技巧
【10月更文挑战第5天】在Java的世界里,异常就像是不请自来的客人,总是在你最不经意的时候敲门。但别担心,这里我们将一起探索如何优雅地迎接这些“客人”。本文将带你了解Java的异常处理机制,教你如何用try-catch语句和finally块来确保程序的稳健运行,并分享一些实用的异常处理技巧,让你的程序更加健壮。
|
2天前
|
Java 程序员 UED
Java编程中的异常处理:从基础到高级
【10月更文挑战第4天】在Java的世界中,异常是程序运行过程中不可避免的现象。本文将通过浅显易懂的语言和生动的比喻,带你了解Java异常处理的基础知识,探索如何优雅地应对程序中出现的问题。我们将一起学习异常的类型、如何捕获和处理它们,以及一些高级技巧,让你的代码更加健壮和用户友好。准备好,让我们一起踏上这段旅程,成为Java异常处理的高手吧!
|
4天前
|
存储 安全 Java
了解final关键字在Java并发编程领域的作用吗?
了解final关键字在Java并发编程领域的作用吗?
|
6天前
|
缓存 安全 Java
Singleton:在 Java 编程中编写和使用的 6 种方法
Singleton:在 Java 编程中编写和使用的 6 种方法
10 0