首先,先简要介绍逻辑运算符的种类:与、或、异或、非。一共四个运算符,它们的运算规则如下所示:
与
|
假
|
真
|
|
或
|
假
|
真
|
假
|
假
|
假
|
假
|
假
|
真
|
真
|
假
|
真
|
真
|
真
|
真
|
|
异或
|
假
|
真
|
|
非
|
假
|
真
|
假
|
假
|
真
|
|
真
|
假
|
真
|
真
|
假
|
|
逻辑运算符两边的操作数都必须是布尔(boolean)型数据,而最后产生的结果也是布尔值。
Java也提供了和上述四种运算相符的运算符,不过情况稍微特殊一些,里面一共包括了&&(与)、 ||(或)、 ^(异或) 、 !(非)、,&(与) 以及 |(或) 等六种逻辑运算符。细心一点的读者能发现&&和&都表示“与”运算,||和| 都表示“或”运算。那么他们之间有什么区别?其实,&&和||就是所谓的“短路逻辑运算符”——学过C语言的人对此应该不陌生的。为了说明什么是“短路逻辑运算符”,我们先看看下面几个例子:
int i = 10,j=20;
boolean b = i++ < 5 && j++ > 10;
//思考1:运行到此处,b、i、j的值分别是多少?
i = 10, j = 20;
b = i++ > 5 || j++<10;
//思考2:运行到此处,b、i、j的值又该是多少?
对于第一个问题,答案是false,6和20;而第二问题的答案则是true,6 和20。这里需要我们关注的是j的值,在上面的两段程序中,j的值都没有被自加,而原因就在于“短路逻辑运算符上”:所谓的短路,就是说当&&和||这两个运算符左边的结果能最终决定整个逻辑表达式的结果时,则不会再浪费时间对运算符右边进行计算了。因此,当&&左边的结果为false,而||左边的结果为true时,它们右边不管有什么东西,都被一一忽略了。如果大家有兴趣还可以试着把上面例子里的短路运算符分别换成&和|运算符,看看最后b、i和j的值分别是多少。
最后,大家轻松一下,问一个微软面试题:一个人走到路口,有两条路可以走,但是只有其中一条路是正确的,而这时路旁有两个人,其中一个人说真话,另外一个人说假话。问:只能问其中一个人一句话,怎么能得到正确答案?给一个提示:利用false && true==false以及true && false==false的运算规则。要是想不出的话,就去网上搜一搜,J。毕竟,我们还要花时间继续往下看。
这一节的移位运算符和下一节的位操作符处于有点尴尬的位置。这两种操作符很有用,特别是在某些算法时,利用它们可以提高整个算法的效率;可是对于大多数程序员来说,这个东西有点像屠龙之技——平时没什么机会用得上。不管怎么说,还是要简单介绍一下,如果想进一步的了解,可以去看看其他的书籍。
一共有三个移位运算符:>>,>>> 和 <<。>>是有符号右移运算符,>>>是无符号右移运算符,而<<是左移运算符。移位运算符左边放置的是待移位数据,而右边放置移位的位数。例如 200>>4,表示将200做有符号右移4位;而256<<3表示将256左移3位。
我们先看有符号右移,有符号右移相当于做除法,200>>2 等价于 200/24,最后的结果等于12(记住我们这可是在做整数的除法)。再给一个例子: -167>>2等价于-167/22,最后结果等于-42。而左移运算符相当于做乘法,256<<3等价于256*23,最后结果等于2048。而对于无符号右移,我这里还是不介绍了,有兴趣的人可以去看看其他的书籍。下面是移位运算的例子。
int i = 400;
int j = i >> 3; // 相当于 j = i / 8;
int k = i << 3; // 相当于 k = i * 8;
有人会问,既然移位运算符等价于做乘法和除法,那么是否可以用算术运算符替代移位运算?答案是否定的,因为移位运算符的速度高于相应的算术运算符,因此在设计一些算法时,使用移位运算符能提高算法的效率。
分享到:
相关推荐
Java 语言程序设计:第二章 Java 语言语法基础 Java 语言程序设计的第二章主要讲解 Java 语言的语法基础,包括标识符、关键字、注释、分隔符、数据类型等内容。本章将对这些概念进行详细的讲解,并提供了多个实例来...
在“JAVA语言程序设计--第二章JAVA基础”这个主题中,我们主要探讨的是Java编程语言的基本概念和核心特性。Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司)于1995年发布。它以其“一...
相比C和C++,Java在语法上做了很多简化和改进,例如不支持全局变量和goto语句,以增强代码的可读性和结构化。Java对指针进行了严格的控制,禁止直接的指针操作,以提高程序的安全性。同时,Java采用自动内存管理,...
本章将深入探讨Java的基础语法,帮助初学者掌握编程的基本概念。 一、Java环境搭建 在开始学习Java编程之前,你需要先安装Java Development Kit (JDK)。JDK包含了编译Java源代码和运行Java程序所需的所有工具,如...
Java语言基础是编程学习的重要部分,它包含了程序设计的基本元素。本章主要讲解了以下几个核心概念: 1. **Java的基本数据类型**: Java提供了多种数据类型来存储不同种类的数据。整数型包括byte(1字节)、short...
## 第二课、变量和数据类型 Java有8种基本数据类型,分为整型(byte, short, int, long)、浮点型(float, double)、字符型(char)和布尔型(boolean)。此外,还有引用数据类型,如类、接口和数组。变量是用来...
在Java编程语言中,语法是构建程序的基础,本章我们将深入探讨其中的三大控制结构:顺序结构、选择结构和循环结构,以及访问修饰符的概念,包括它们的不同作用和使用场景。此外,我们还将讨论方法这一核心概念,以及...
计算机后端-Java-Java核心基础-第06章 Java基本语法4 16. 质数输出的实现方式二.avi
计算机后端-Java-Java核心基础-第06章 Java基本语法4 22. 项目二登记收入功能的实现.avi
第二章主要讲解Java的基础语法,这是学习任何编程语言的基础。在这个章节中,学生将深入理解Java中的标识符、关键字、基本数据类型、变量和常量、运算符、语句以及输入参数的处理方式。 标识符在Java中用于给变量、...
Java语言基础语法 Java语言基础语法是Java程序设计的基础,涵盖了数据类型、变量、运算符、控制流语句、数组等知识点。在本章节中,我们将详细介绍Java语言的基础语法。 数据类型是Java语言的基础,Java语言定义了...
在Java程序设计与数据结构的学习过程中,第二章通常会涵盖基础的编程概念和初步的数据结构。这个主题旨在帮助初学者建立坚实的编程基础,理解和运用核心的Java语法,以及理解数据结构的基本原理。以下是对这些知识点...
值得注意的是,保留字是具有特殊含义的关键字,如abstract、break、byte等,不能作为普通标识符使用,因为它们在Java语法中有特定的用途。 变量是程序的基本存储单元,其定义包括变量名、变量类型和作用域。变量的...
在"accp5.0 Java第二章变量(二)"中,我们将深入探讨Java变量的各个方面,包括类型、声明、初始化以及它们在程序中的作用。 首先,Java变量有三种基本类型:整型(如int)、浮点型(如float和double)和字符型(如...
4. **Java基础语法** - Java程序以类(class)为单位,每个类都有自己的方法和变量。 - 注释类型包括单行注释、多行注释和文档注释。 - 数据类型分为基本数据类型(如byte、short、int、long、float、double、char...
在《Java程序设计教程(第七版)》的第二章中,我们深入探讨了Java编程的基础概念和关键元素,这是每一个Java开发者必须掌握的核心知识。这一章涵盖了诸多重要的知识点,包括但不限于: 1. **Java环境搭建**:首先...