第二章 Java的数据类型
====================================== ===>>> 第三章 Java的运算符和表达式 <<<=== ====================================== §3-1 运算符 一、对于C/C++来说,Java中的运算符号并没有做多大改动,在称谓上面,由C/C++里面的“目”改成 了“元”。比如说:在C++里面叫做“三目运算符”的?:,在Java里面叫做“三元运算符”。 同样,Java是允许进行自加(i++或者++i)和自减(j--或者--j)运算的。 二、Java的运算符归纳如下: 1、算术运算符 ( + 、- 、* 、/ 、% 、++ 、-- ) 2、关系运算符 ( > 、< 、>= 、<= 、== 、!= ) 3、布尔逻辑运算符 ( ! 、&& 、|| ) 4、位运算符 ( >> 、<<、>>> 、& 、| 、^ 、~ ) 5、赋值运算符 ( = 、及其扩展赋值运算符如:+= ) 6、条件运算符 ( ?: ) 7、其它(包括分量运算符·,下标运算符[],实例运算符instance of,内存分配运算符new,强制 类型转换运算符(类型),方法调用运算符()等) §3-2 算术运算符
一、一元算术运算符 运算符 用法 描述 + +op 正值 - -op 负值 ++ ++op,op++ 加1 -- --op,op-- 减1 二、二元算术运算符 运算符 用法 描述 + op1+op2 加 - op1-op2 减 * op1*op2 乘 / op1/op2 除 % op1%op2 取模(求余) Java对加运算符进行了扩展,使它能够进行字符串的连接,如"abc"+"de",得到串"abcde"。 与C/C++不同,对取模运算符%来说,其操作数可以为浮点数37.2%10=7.2。 下面的例子说明了算术运算符的使用: public class ArithmaticOp { public static void main( String args[] ) { int a=5+4; //a=9 int b=a*2; //b=18 int c=b/4; //c=4 int d=b-c; //d=14 int e=-d; //e=-14 int f=e%4; //f=-2 double g=18.4; double h=g%4; //h=2.4 int i=3; int j=i++; //i=4,j=3 int k=++i; //i=5,k=5 System.out.println("a = "+a); System.out.println("b = "+b); System.out.println("c = "+c); System.out.println("d = "+d); System.out.println("e = "+e); System.out.println("f = "+f); System.out.println("g = "+g); System.out.println("h = "+h); System.out.println("i = "+i); System.out.println("j = "+j); System.out.println("k = "+k); } } 其结果为: C:\>java ArithmaticOp a = 9 b = 18 c = 4 d = 14 e = -14 f = -2 g = 18.4 h = 2.4 i = 5 j = 3 k = 5 § 3-3 关系运算符 运算符 用法 返回true的情况 > op1>op2 op1大于op2 >+ op1>=op2 op1大于或等于op2 < op1<op2 op1小于op2 <= op1<=op2 op1小于或等于op2 == op1==op2 op1与op2相等 != op1!=op2 op1与op2不等 和C/C++相比,Java中的何数据类型的数据(包括基本类型和组合类型)都可以通过“==”或“!=” 来比较是否相等。 关系运算的结果返回true或false,而不是C/C++中的1或0。 关系运算符常与布尔逻辑运算符一起使用,作为流控制语句的判断条件。如:if( a>b && b==c) § 3-4 布尔逻辑运算符 op1 op2 op1&&op2 op1||op2 !op1 false false false false true false true false true true true false false true false true true true true false ·&&、‖为二元运算符,实现逻辑与、逻辑或。 ·!为一元运算符,实现逻辑非。 ·对于布尔逻辑运算,先求出运算符左边的表达式的值,对或运算如果为true,则整个表达式的结果为true,不必对运算符右边的表达式再进行运算;同样,对与运算,如果左边表达式的值为false,则不必对右边的表达式求值,整个表达式的结果为false。 下面的例子说明了关系运算符和布尔逻辑运算符的使用。 public class RelationAndConditionOp{ public static void main( String args[] ){ int a=25,b=3; boolean d=a<b; //d=false System.out.println("a<b = "+d); int e=3; if(e!=0 && a/e>5) System.out.println("a/e = "+a/e); int f=0; if(f!=0 && a/f>5) System.out.println("a/f = "+a/f); else System.out.println("f = "+f); } } 其运行结果为: C:\>java RelationAndConditionOp a<b = false a/e = 8 f = 0 注意:上例中,第二个if语句在运行时不会发生除0溢出的错,因为e!=0为false,所以就不需要对a/e进行运算。 § 3-5 位运算符 位运算符用来对二进制位进行操作,Java中提供了如下的位运算符: 位运算符中,除“~”以 外,其余均为二元运算符。 操作数只能为整型和字符型数据。 3-4-1 补码 Java使用补码来表示二进制数,在补码表示中,最高位为符号位,正数的符号位为0,负数为1。补码 的规定如下: 对正数来说,最高位为0,其余各位代表数值本身(以二进制提示),如+42的补码为00101010。 对负数而言,把该数绝对值的补码按位取反,然后对整个数 1、即得该数的补码。如: -42的补码为11010110(00101010按位取反11010101 +1 11010110 ) 用补码来表示数,0的补码是唯一的,都 为00000000。(而在原码,反码表示中,+0和-0的表示是不 唯一的,可参见相应的书籍)而且可以用111111表示-1的补码)这也是补码与原码和反码的区别)。 3-4-2 按位取反运算符 ~ ~ 是一元运算法,对数据的每个二进制位取反,即把1变为0,把0变为1。 例如 : 0010101 ~ 1101010 注意,运算符与-运算符不同,~21≠-21。 3-4-3 按位与运算符& 参与运算的两个值,如果两个相应位都为1,则该位的结果为1,例如: 0010101 ~ 1101010 注意,~运算符与-运算符不同,~21≠-21。 3-4-3 按位与运算符& 参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0。即: 0 & 0 = 0 ;0 & 1 = 0 ;1 & 0 = 0 ;1 & 1 = 1 ;
|