运算符指明对操作数所进行的运算。按操作数的数目来分一元(如-)二元运算符(如、)和三元运算符(如?:)它们分别对应于一元运算符来说可以有前缀表达式(如i)和后缀表达式(如采用中缀表达式(如ab)。按照运算符功能来分基本的运算符分下面几类算术运算符(-*/%--)关系运算符(!)布尔逻辑运算符(!||)位运算符(|^)赋值运算符(及其扩展赋值运算符如)条件运算符(?:)其它(包括分量运算符·下标运算符[]实例运算符instance of内存分配运算符new强制类型转换运算符(类型)方法调用运算符()等)本章中我们主要讲述前6类运算符。§3.1算术运算符算术运算符作用于整型或浮点型数据完成算术运算。一、二元算术运算符如下表所示运算符 用法 描述 op1op2 加- op1-op2 减* op1*op2 乘/ op1/op2 除% op1%op2 取模(求余)Java对加运算符进行了扩展使它能够进行字符串的连接如abcde得到串abcde。我们将在第七章中讲解。与C、C不同对取模运算符%来说其操作数可以为浮点数如37.2%107.2。二、一元算术运算符如下表所示运算符 用法 描述 op 正值- -op 负值 opop 加1-- --opop-- 减1i与i的区别i在使用i之后使i的值加1因此执行完i后整个表达式的?为i而i的值变为i1。i在使用i之前使i的值加1因此执行完i后整个表达式和i的值均为i1。对i--与--i同样。例3.1.下面的例子说明了算术运算符的使用public class ArithmaticOp{public static void main(String args[]){int a54;//a9int ba*2;//b18int cb/4;//c4int db-c;//d14int e-d;//e-14int fe%4;//f-2double g18.4;double hg%4;//h2.4int i3;int ji;//i4j3int ki;//i5k5System.out.println(aa);System.out.println(bb);System.out.println(cc);System.out.println(dd);System.out.println(ee);System.out.println(ff);System.out.println(gg);System.out.println(hh);System.out.println(ii);System.out.println(jj);System.out.println(kk);}}其结果为C:\java ArithmaticOpa9b18c4d14e-14f-2g18.4h2.4i5j3k5§3.2关系运算符关系运算符用来比较两个值返回布尔类型的值true或false? 关系运算符都是二元运算符如下表所示运算符 用法 返回true的情况 op1op2 op1大于op2 op1op2 op1大于或等于op2 op1op2 op1小于op2 op1op2 op1小于或等于op2 op1op2 op1与op2相等! op1!op2 op1与op2不等Java中任何数据类型的数据(包括基本类型和组合类型)都可以通过或!来比较是否相等(这与C、C不同)。关系运算的结果返回true或false而不是C、C中的1或0。关系运算符常与布尔逻辑运算符一起使用作为流控制语的判断条件。如if(abbc)§3.3布尔逻辑运算符布尔逻辑运算符进行布尔逻辑运算如下表所示op1 op2 op1op2 op1||op2 !op1false false false false truefalse true false true truetrue false false true falsetrue true true true false·、‖ 为二元运算符实现逻辑与、逻辑或。·!为一元运算符实现逻辑非。·对于布尔逻辑运算先求出运算符左边的表达式的值对或运算如果为true则整个表达式的结果为true不必对运算符右边的表达式再进行运算;同样对与运算如果左边表达式的值为false则不必对右边的表达式求值整个表达式的结果为false。下面的例子说明了关系运算符和布尔逻辑运算符的使用。public class RelationAndConditionOp{public static void main(Stringargs[]){int a25b3;boolean dab;//dfalseSystem.out.println(abd);int e3;if(e!0a/e5)System.out.println(a/ea/e);int f0;if(f!0a/f5)System.out.println(a/fa/f);elseSystem.out.println(ff);}}其运行结果为C:\java RelationAndConditionOpabfalsea/e8f0注意上例中第二个if语句在运行时不会发生除0溢出的错因为e!0为false所以就不需要对a/e进行运算。§3.4位运算符位运算符用来对二进制位进行操作Java中提供了如下表所的位运算符位运算符中除 以外其余均为二元运算符。操作数只能为整型和字符型数据。3.4.1补码Java使用补码来表示二进制数在补码表示中最高位为符号?正数的符号位为0负数为1。补码的规定如下对正数来说最高位为0其余各位代表数值本身(以二进制?示)如42的补码为00101010。对负数而言把该数绝对值的补码按位取反然后对整个数1即得该数的补码。如-42的补码为11010110(00101010按位取反11010101111010110)用补码来表示数0的补码是唯一的都为00000000。(而在原码反码表示中0和-0的表示是不唯一的可参见相应的书籍)。而且可以用111111表示-1的补(这也是补码与原码和反码的区别)。3.4.2按位取反运算符 是一元运算法对数据的每个二进制位取反即把1变为0把0变为1。例如00101011101010注意运算符与-运算符不同21≠-21。3.4.3按位与运算符参与运算的两个值如果两个相应位都为1则该位的结果为1。例如00101011101010注意运算符与-运算符不同21≠-21。3.4.3按位与运算符参与运算的两个值如果两个相应位都为1则该位的结果为1否则为0。即000010100111