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的结果。

 

目录
相关文章
|
1月前
|
IDE Java 编译器
java编程最基础学习
Java入门需掌握:环境搭建、基础语法、面向对象、数组集合与异常处理。通过实践编写简单程序,逐步深入学习,打牢编程基础。
166 0
|
1月前
|
Java
如何在Java中进行多线程编程
Java多线程编程常用方式包括:继承Thread类、实现Runnable接口、Callable接口(可返回结果)及使用线程池。推荐线程池以提升性能,避免频繁创建线程。结合同步与通信机制,可有效管理并发任务。
139 6
|
1月前
|
安全 前端开发 Java
从反射到方法句柄:深入探索Java动态编程的终极解决方案
从反射到方法句柄,Java 动态编程不断演进。方法句柄以强类型、低开销、易优化的特性,解决反射性能差、类型弱、安全性低等问题,结合 `invokedynamic` 成为支撑 Lambda 与动态语言的终极方案。
142 0
|
2月前
|
SQL Java 数据库
2025 年 Java 从零基础小白到编程高手的详细学习路线攻略
2025年Java学习路线涵盖基础语法、面向对象、数据库、JavaWeb、Spring全家桶、分布式、云原生与高并发技术,结合实战项目与源码分析,助力零基础学员系统掌握Java开发技能,从入门到精通,全面提升竞争力,顺利进阶编程高手。
477 1
|
2月前
|
Java 开发者
Java并发编程:CountDownLatch实战解析
Java并发编程:CountDownLatch实战解析
423 100
|
2月前
|
NoSQL Java 关系型数据库
超全 Java 学习路线,帮你系统掌握编程的超详细 Java 学习路线
本文为超全Java学习路线,涵盖基础语法、面向对象编程、数据结构与算法、多线程、JVM原理、主流框架(如Spring Boot)、数据库(MySQL、Redis)及项目实战等内容,助力从零基础到企业级开发高手的进阶之路。
245 1
|
2月前
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
196 16
|
3月前
|
安全 Java Shell
Java模块化编程(JPMS)简介与实践
本文全面解析Java 9模块化系统(JPMS),帮助开发者解决JAR地狱、类路径冲突等常见问题,提升代码的封装性、性能与可维护性。内容涵盖模块化核心概念、module-info语法、模块声明、实战迁移、多模块项目构建、高级特性及最佳实践,同时提供常见问题和面试高频题解析,助你掌握Java模块化编程精髓,打造更健壮的应用。
|
3月前
|
安全 算法 Java
Java泛型编程:类型安全与擦除机制
Java泛型详解:从基础语法到类型擦除机制,深入解析通配符与PECS原则,探讨运行时类型获取技巧及最佳实践,助你掌握泛型精髓,写出更安全、灵活的代码。
|
3月前
|
安全 Java 数据库连接
2025 年最新 Java 学习路线图含实操指南助你高效入门 Java 编程掌握核心技能
2025年最新Java学习路线图,涵盖基础环境搭建、核心特性(如密封类、虚拟线程)、模块化开发、响应式编程、主流框架(Spring Boot 3、Spring Security 6)、数据库操作(JPA + Hibernate 6)及微服务实战,助你掌握企业级开发技能。
517 3