`
tangqs
  • 浏览: 18605 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

第二章 Java基础语法(7)

阅读更多

2.6.5              逻辑运算符

首先,先简要介绍逻辑运算符的种类:与、或、异或、非。一共四个运算符,它们的运算规则如下所示:

 

 

异或

 

 

 

逻辑运算符两边的操作数都必须是布尔(boolean)型数据,而最后产生的结果也是布尔值。

Java也提供了和上述四种运算相符的运算符,不过情况稍微特殊一些,里面一共包括了&&(与)、 ||(或)、 ^(异或) !(非)、,&(与) 以及 |(或) 等六种逻辑运算符。细心一点的读者能发现&&&都表示“与”运算,||| 都表示“或”运算。那么他们之间有什么区别?其实,&&||就是所谓的“短路逻辑运算符”——学过C语言的人对此应该不陌生的。为了说明什么是“短路逻辑运算符”,我们先看看下面几个例子:

int i = 10,j=20;

boolean b = i++ < 5 && j++ > 10; 

//思考1:运行到此处,bij的值分别是多少?

i = 10, j = 20;

b = i++ > 5 || j++<10;

//思考2:运行到此处,bij的值又该是多少?

对于第一个问题,答案是false620;而第二问题的答案则是true6 20。这里需要我们关注的是j的值,在上面的两段程序中,j的值都没有被自加,而原因就在于“短路逻辑运算符上”:所谓的短路,就是说当&&||这两个运算符左边的结果能最终决定整个逻辑表达式的结果时,则不会再浪费时间对运算符右边进行计算了。因此,当&&左边的结果为false,而||左边的结果为true时,它们右边不管有什么东西,都被一一忽略了。如果大家有兴趣还可以试着把上面例子里的短路运算符分别换成&|运算符,看看最后bij的值分别是多少。

最后,大家轻松一下,问一个微软面试题:一个人走到路口,有两条路可以走,但是只有其中一条路是正确的,而这时路旁有两个人,其中一个人说真话,另外一个人说假话。问:只能问其中一个人一句话,怎么能得到正确答案?给一个提示:利用false && true==false以及true && false==false的运算规则。要是想不出的话,就去网上搜一搜,J。毕竟,我们还要花时间继续往下看。

2.6.6      移位运算符

这一节的移位运算符和下一节的位操作符处于有点尴尬的位置。这两种操作符很有用,特别是在某些算法时,利用它们可以提高整个算法的效率;可是对于大多数程序员来说,这个东西有点像屠龙之技——平时没什么机会用得上。不管怎么说,还是要简单介绍一下,如果想进一步的了解,可以去看看其他的书籍。

一共有三个移位运算符:>>>>> <<>>是有符号右移运算符,>>>是无符号右移运算符,而<<是左移运算符。移位运算符左边放置的是待移位数据,而右边放置移位的位数。例如 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;

有人会问,既然移位运算符等价于做乘法和除法,那么是否可以用算术运算符替代移位运算?答案是否定的,因为移位运算符的速度高于相应的算术运算符,因此在设计一些算法时,使用移位运算符能提高算法的效率。

 

1
0
分享到:
评论

相关推荐

    第二章java基础语法.docx

    第二章java基础语法.docx 第二章java基础语法.docx第二章java基础语法.docx 第二章java基础语法.docx

    Java语言程序设计:第二章 Java语言语法基础.ppt

    Java语言程序设计:第二章 Java语言语法基础.ppt

    计算机后端-Java-Java核心基础-第06章 Java基本语法4 16. 质数输出的实现方式二.avi

    计算机后端-Java-Java核心基础-第06章 Java基本语法4 16. 质数输出的实现方式二.avi

    计算机后端-Java-Java核心基础-第06章 Java基本语法4 22. 项目二登记收入功能的实现.avi

    计算机后端-Java-Java核心基础-第06章 Java基本语法4 22. 项目二登记收入功能的实现.avi

    java基础语法.doc

    想要入门java童鞋的可以看这篇文档,可以快速的入门java

    Java 基础学习PPt---适合准备学习Java的初学者

    第一章 Java 概述 第二章 Java 基础语法【上】 第三章 java 基础语法【下】 第四章 面向对象 【上】 第五章 面向对象 【下】

    Java课件最全

    Java基础教程,最全版本 第1章 Java环境及配置 第2章 Java基本语法 第3章 类和接口 第4章 Java Applet 第5章 Java图形处理 第6章 Java用户界面技术 第7章 异常、事件和多线程机制 第8章 输入输出技术 第9章 ...

    零基础学Java Web开发

     第2章 Java基础语法  第3章 Java面向对象编程  第二篇 JSP基本知识  第4章 JSP基本语法  第5章 JSP内置对象  第6章 JSP与JavaBean  第7章 JSP与JDBC  第8章 Servlet编程  第9章 Servlet编程  第...

    java基础教学-java初级资料.zip

    第二章 java 语言语法1 第三章 java 语言语法2 第四章 java 数组 第五章 面向对象1 第六章 面向对象2 第七章 面向对象3 第八章 java常用类库1 第九章 java常用类库2 第十章 异常处理 第十一章 java集合 第十二章 ...

    java学习课件第二章

    第二章、java语法基础 第三章、面向对象特征 第四章、applet及其应用 第五章、图形用户界面设计 第六章、异常处理 第七章、线程 第八章、集合操作 第九章、文件输入输出 第十章、网络编程

    java自学教程

    第2章 Java基本语法 第3章 类和接口 第4章 Java Applet 第5章 Java图形处理 第6章 Java用户界面技术 第7章 异常、事件和多线程机制 第8章 输入输出技术 第9章 Java数据库技术 第10章 Java安全技术 第11章 ...

    JAVA自学教程(史上最全).ppt

    第2章 Java基本语法 第3章 类和接口 第4章 Java Applet 第5章 Java图形处理 第6章 Java用户界面技术 第7章 异常、事件和多线程机制 第8章 输入输出技术 第9章 Java数据库技术 第10章 Java安全技术 第11章 ...

    JAVA语言入门(chm)

    第二章 Java程序开发与运行环境 第三章 Java程序设计基础 第四章 Java应用程序的基本框架 第五章 Java的类 第六章 Java图形用户接口 第七章 多线程 第八章 Java的"异常" 第九章 Java输入输出操作

    java学习课件第三章

    第二章、java语法基础 第三章、面向对象特征 第四章、applet及其应用 第五章、图形用户界面设计 第六章、异常处理 第七章、线程 第八章、集合操作 第九章、文件输入输出 第十章、网络编程

    java基础教程.pdf

    本书共 208 页,带课后作业,分八章: 第一章 Java 入门 第二章 基础语法 第三章 Java 类和对象 第四章 Java 高级类特性 第五章 数组和枚举 第六章 常见类的使用 第七章 抽象类和接口 第八章 异常和断言

    java学习课件 第四章

    第二章、java语法基础 第三章、面向对象特征 第四章、applet及其应用 第五章、图形用户界面设计 第六章、异常处理 第七章、线程 第八章、集合操作 第九章、文件输入输出 第十章、网络编程

    编程实践:Java进阶100例

    第二章:MyEclipse的基本使用; 第三章:Java基础语法; 第四章:数组的应用; 第五章:面向对象的Java编辑; 第六章:接口与内部类; 第七章:集合的应用; 第八章:异常和反射; 第九章:初识AWT和Swing; 第十章...

    《Java EE应用开发基础》第二章课件(PDF版)

    济南大学《Java EE应用开发基础》课程课件(PDF版),第二章JSP应用基础 2.1 Servlet应用 2.2 JSP语法 2.3 JSP内置对象 2.4 JSP综合应用实例

    《Java语言程序设计——基础篇》第二章基本程序设计示例.zip

    中文版分为《Java语言程序设计基础篇》和《Java语言程序设计进阶篇》主要介绍语法结构、面向对象程序设计基础知识到面向对象程序设计、图形用户界面设计、异常处理、二进制I/O和递归等内容。进阶篇主要介绍数据结构...

Global site tag (gtag.js) - Google Analytics