Java运算符与表达式(二)
来自CloudWiki
比较运算符
- 关系运算符,又称比较运算符,用于比较两个操作数的大小,运算结果是boolean型。
- 当运算符对应的关系成立时,运算结果是true。
- 当运算符对应的关系不成立时,运算结果是false。
10 > 9 //运算结果是true 10 < 9 //运算结果是false 10 >= 9 //运算结果是true 10 <= 9 //运算结果是false 10 == 9 //运算结果是false 10 != 9 //运算结果是true
- 关系运算符的>、>=、<、<=两边的操作数只能是数值类型。
- 关系运算符的==、!=两个的操作数可以是数值类型,也可以是引用类型(暂时不考虑)
商院面馆:产品调查
public class Operator { public static void main(String[] args) { // TODO Auto-generated method stub float price,weight;int num; boolean isEnough; price = 10f;num =5;weight = 0.5f; System.out.println("价格是否平价?"+(price <=15)); System.out.println("重量是否大于0.3kg?"+(weight>=0.3)); isEnough = num<5; System.out.println("是否外送?"+isTakeOut); } }
练习:假设int a = 10;int b = 20;
打印a == b、a != b、a > b、a < b、b >= a、b <= a的值
练习:假设你的商品价格等于110,折扣为7.5折,包邮:
1. 价格是否大于于100; 2. 折扣是否小于等于0.8(80%) 3. 商品是否包邮
请设计变量、编写表达式将这几个因素打印出来。
逻辑运算符
Java语言使用&& 、||、! 对条件进行逻辑运算或组着。
- ! 表示单个条件的“否”关系,如图3
- && 表示多个条件之间的“与”关系,如图2
- ||表示多个条件之间的“或”关系,如图1
- 逻辑运算符用于操作两个布尔型的变量或常量。逻辑运算符包括:
!:逻辑非运算符
- !:逻辑非运算符,只需要一个操作数,如果操作数为true,则返回false;如果操作数为false,则返回true。例如:
System.out.println(2 > 8) //运算结果为true System.out.println(!(2 > 8)) //运算结果为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。
案例: 商院面馆 的商品
- 是否同时满足价格低于15且数量小于5?
- 是否满足价格低于15或数量小于5 ?
- 是否为外送?
代码:
public class Operator { public static void main(String[] args) { // TODO Auto-generated method stub float price; int num; boolean isTakeOut=true; price = 10f;num =5; System.out.println("是否同时满足数量小于5且价格低于15? "+(num<5&&price<15)); System.out.println("是否满足数量小于5或价格低于15 ?"+(num<5||price<15)); System.out.println("是否为外送?"+isTakeOut); System.out.println("是否为堂吃?"+!isTakeOut); } }
练习;
逻辑运算符:假设boolean a = true; boolean b = false;
打印a && b、a || b 、!(a && b) 的值。
练习:假设你的商品价格等于110,折扣为7.5折,剩余数量为50,包邮:
1. 该商品是否满足价格低于150 且折扣小于0.8; 2. 该商品是否满足剩余数量大于40或折扣小于0.9 3. 该商品是否需支付运费 ?
位运算符(选学)
- *任何信息在计算机中都是以二进制的形式存在的,位运算符对操作数中的每个二进制位都进行运算。位运算符包括:
- &:按位与。当两位同时为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
- 拓展:一个整数的二进制表达
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,所以圆括号可以改变表达式的处理顺序。
题目:假设int a = 10;int b = 20;int c=30
打印 a+ b*c 与 (a+b)*c 的值,体会括号的作用。
练习:打印!(a && b) 与!a && b的值,体会括号的作用。
三目运算符
- 三目运算符只有一个:?:,三目运算符的语法格式如下:
- 逻辑表达式?表达式1:表达式2
- 三目运算符的规则是:先对第一个操作数逻辑表达式求值,如果逻辑表达式返回true,则返回第二个操作数表达式1的值;如果逻辑表达式返回false,则返回第三个操作数表达式2的值。例如:
String str = 5 > 3 ? "5大于3" : "5不大于3"; System.out.println(str); //输出“5大于3”
同样的普通if语句,如果用三目运算符来做,更简单:
int value = 113; if(value >100){ System.out.println("空气质量不好!"); }else{ System.out.println("空气质量很好!"); }
可以写为:
int value = 113; String str = value>100 ?"空气质量不好!" :"空气质量很好!"; System.out.println(str);
面馆例题:
package demo1; import java.util.Scanner; public class happy08 { public static void main(String[] args) { // TODO Auto-generated method stub //int a = 10 ;int b = 20; //System.out.println(a==b); Scanner sc = new Scanner(System.in); System.out.println("客官,您是堂吃还是外卖?1.堂吃; 2.外卖"); String s = sc.next(); String s2 = (s.equals("1")) ? "堂吃一位" : "外送一位"; System.out.println(s2); } }
案例: 练习:假设你的商品价格等于110,折扣为7.5折,剩余数量为50,包邮:
1. 判断该商品价格是否小于一百五,如果是,打印“该商品为平价商品”; 2. 判断该商品价格是否打折,如果是,打印“该商品打折促销中”; 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程序设计