Java运算符与表达式(二)
来自CloudWiki
关系运算符
- 关系运算符,又称比较运算符,用于比较两个操作数的大小,运算结果是boolean型。
- 当运算符对应的关系成立时,运算结果是true。
- 当运算符对应的关系不成立时,运算结果是false。
10 > 9 //运算结果是true 10 < 9 //运算结果是false 10 >= 9 //运算结果是true 10 <= 9 //运算结果是false 10 == 9 //运算结果是false 10 != 9 //运算结果是true
- 关系运算符的>、>=、<、<=两边的操作数只能是数值类型。
- 关系运算符的==、!=两个的操作数可以是数值类型,也可以是引用类型(暂时不考虑)
逻辑运算符
- 逻辑运算符用于操作两个布尔型的变量或常量。逻辑运算符包括:
- &&:逻辑与运算符,前后两个操作数必须都是true才返回true,否则返回false。例如,2>8&&9>2的结果为false。
int a = 2; int b = 8; System.out.println(a < b && b> 2); //输出表达式的运算结果为true System.out.println(a > b && b> 2); //输出表达式的运算结果为false;
- 逻辑与运算符具备短路效果,即当前面的操作数(a>b)为false,后面的操作数对应的表达式不再执行,直接返回false。
- ||:逻辑或运算符,只要两个操作数中有一个是true,就可以返回true,否则返回false。
int a = 2; int b = 8; //输出表达式的运算结果为true System.out.println(a < b || b> 2); //a的值为2,b的值为8 System.out.println(a < b || b< 2); //此时,输出表达式的运算结果仍然为true
- 逻辑或运算符具备短路效果,即当前面的操作数(a>b)为true,后面的操作数对应的表达式不在执行,直接返回true。
- !:逻辑非运算符,只需要一个操作数,如果操作数为true,则返回false;如果操作数为false,则返回true。例如:
System.out.println(!(2 > 8)) //运算结果为true
位运算符(选学)
- *任何信息在计算机中都是以二进制的形式存在的,位运算符对操作数中的每个二进制位都进行运算。位运算符包括:
- &:按位与。当两位同时为1时才返回1。
- |:按位或。只要有一位为1即可返回1。
- ~:按位非。单目运算符,将操作数的每一位(包括符号位)全部取反。
- ^:按位异或。当两位相同时返回0,不同时返回1.
- >>:右移运算符。例如,11>>2; // 则是将数字11右移2位。
- <<:左移运算符。例如,5 <<2; //则是将数字5左移2位。
- >>>:无符号右移运算符。
- 原理:
A = 0011 1100 B = 0000 1101 ----------------- A&b = 0000 1100 A | B = 0011 1101 A ^ B = 0011 0001 ~A= 1100 0011
- 例子:
public class Test { public static void main(String[] args) { int a = 60; /* 60 = 0011 1100 */ int b = 13; /* 13 = 0000 1101 */ int c = 0; c = a & b; /* 12 = 0000 1100 */ System.out.println("a & b = " + c ); c = a | b; /* 61 = 0011 1101 */ System.out.println("a | b = " + c ); c = a ^ b; /* 49 = 0011 0001 */ System.out.println("a ^ b = " + c ); c = ~a; /*-61 = 1100 0011 */ System.out.println("~a = " + c ); c = a << 2; /* 240 = 1111 0000 */ System.out.println("a << 2 = " + c ); c = a >> 2; /* 15 = 1111 */ System.out.println("a >> 2 = " + c ); c = a >>> 2; /* 15 = 0000 1111 */ System.out.println("a >>> 2 = " + c ); } }
- 拓展:一个整数的二进制表达
int i = 5; String b = (Integer.toBinaryString(i));
括号运算符
- 圆括号“()”也是Java的运算符,圆括号是用来处理表达式优先级的。
- 例如,一个简单的加减乘除表达式为例:
3+5+4*6-7 //未加括号的表达式
- 相信根据读者现在所学过的数学知识,这道题应该很容易解开。利用加减乘除的优先级(*、/的优先级大于+、-)来计算,这个表达式的结果为25。如果想先计算3+5+4、6-7,然后再将计算后的两个数相乘,就必须将3+5+4及6-7分别加上括号,成为下面的表达式:
(3+5+4)*(6-7) // 加上括号的表达式。
- 此时,具备圆括号的表达式运算结果为-12,所以圆括号可以改变表达式的处理顺序。
三目运算符
- 三目运算符只有一个:?:,三目运算符的语法格式如下:
- 逻辑表达式?表达式1:表达式2
- 三目运算符的规则是:先对第一个操作数逻辑表达式求值,如果逻辑表达式返回true,则返回第二个操作数表达式1的值;如果逻辑表达式返回false,则返回第三个操作数表达式2的值。例如:
String str = 5 > 3 ? "5大于3" : "5不大于3"; System.out.println(str); //输出“5大于3”
Java练习题
- 赋值运算符:假设int a = 10; int b = 20; int c = 30;
打印 c = a + b、c += a、c += a、c += a、c += a的值。
- 算术运算符:假设int a = 10; int b = 20; int c = 25; int d = 25;
打印a+b、a-b、a*b、b/a、b%a、c%a、a++、a--、d++、++d
- 计算n的阶乘(n=3,4,5,6,7)
- 这段代码运行后,i等于多少?j等于多少?k等于多少?
int i = 0; int j = i++; int k = --i;
- 关系运算符:假设int a = 10;int b = 20;
打印a == b、a != b、a > b、a < b、b >= a、b <= a的值
- 逻辑运算符:假设boolean a = true; boolean b = false;
打印a && b、a || b 、!(a && b) 的值。
- 快速计算2*16
返回 Java程序设计