目录
一、算术运算符号
1.取模%符号,
用于取余数,即10%3结果为1,在JAVA中 取余有公式
a%b = a - a / b * b
当有小数存在时,应当加上 a%b = a - (int)a / b * b
在带有负号的运算中很有帮助 例如
-10 % 3 = -10 - (-10) / 3 * 3 = -1
10 % -3 = 10 - 10 / (-3) * (-3)=1
-10 % -3 = -10 - (-10)/(-3) * (-3) = -1
2.++自增与--自减
在独立语句中,i++等同于++i,都是i = i +1
但在非独立语句中,前+与后+有很大的差别
例如
int j = 8; int k = ++j;
对此前++,先执行自增语句即此时j = 9,随后赋值于k,即k = 9.
但是对于后++
int j=8; int k = j++;
先执行赋值 k = j = 8;而后执行自增 j = 9 ;
对于临时变量,int i = 1; i=i++ ;println(i);
逻辑 (1)temp = i (2)i=i+1 (3)i = temp 所以i仍然是=1
int i = 1; i=++i; println(i);
逻辑 (1)i = i+1 (2)temp = i (3)i = temp 所以i的结果会自增一个 i=2
示例 剩59天放假,问合多少周多少天
int week;int day;int days = 59;
week = 59 / 7 ; //week = 8
day = 59 % 7 ; //day = 3
示例2 定义变量保存 华氏摄氏度234.6转换为摄氏度,公式为 5 / 9 * (华摄氏度 - 100)
double hua = 234.6;
double she;
she = 5 / 9 * (hua - 100);//注意,不能照搬公式计算,在JAVA中5 / 9
//作为一段逻辑运算此时两个都是整型数据,直接相除只会得到整型数据,只会剩下0
//则该段输出0,应该更改为,she = 5.0 / 9 * (hua - 100); 可正常运行
二、关系运算符
== 相等于 8 == 7 false
!= 不等于 8 != 7 true
< 小于
> 大于
>= <= 大于/小于等于
特别注意,在关系运算中,只会比较后只会输出为true或者false,且只能赋值于boolean数据中。
三、逻辑运算符
分为两组(1)短路与&& 短路或|| 取反!
(2)逻辑与& 逻辑或| 逻辑异或^
在开发中,常用短路运算符,即 && ||
a b a & b a && b a | b a || b !a a^b
T T T T T T F F
T F F F F F F T
F T F F T T T T
F F F F F F T F
可整理为,
对于与符号&,逻辑表达同等于&&,当变量全为1时,输出为1,即a*b;
对于或符号|,逻辑表达式同等与||,当变量有一个为1时,输出为1,即a+b;
对于非符号!,即对所运算变量取反;
对于异或符号a^b,当变量不同时,输出为1,否则输出为0。
同关系运算符一致,也是输出布尔类型的数据
1.&&和&的基本规则
两者在逻辑表达式上一样,都在两个变量为真是输出真
区别 对于&&短路与,如果第一个条件为false,则第二个条件不会判断,直接输出false
示例
int a = 4;
int b = 9;
if (a < 1 && ++b < 50) {
System.out.println("ok100");
}
System.out.println("a=" + a +'\t' + "b=" + b);
如果改为逻辑与&;if (a < 1 & ++b < 50) 则会输出第二个条件的判断,执行++b,因为要判断多个,所以常用短路与&&,效率高
2.||和|的基本规则
两个逻辑表达式相同,当两个变量有一个为true时,输出true
区别同上,短路或||效率高,当第一个条件判断true时直接输出true,所以常用短路或||
3.! 的基本规则
当变量为false时输出为true,当变量为true时输出为false。
4.^的基本规则
当两个变量不同时,输出true,否则输出false
四、逻辑运算符练习
1.
(1).因为x++为后++,所以先进行判断,随后参与自增,即 x!=6,然后if条件内为flase,不输出大括号内容,且因为&为逻辑与,所以第二个条件正常运行判断,所以x=6 ,y=6;
(2).同1,x = 6,而中间的逻辑符号为短路与&&所以后面的也不执行,所以y = 5;
(3).x++为后++,所以先进行判断,随后自增,第一个条件判断为true,此时x = 6 ,因为是逻辑或|,所以第二条件执行,++y先自增,后判断,判断为false,但是逻辑符号为或,只要有一个true则输出为true,所以if大括号内容执行,至此x = 11,y = 6;
(4).同1,但因为是短路或,在第一条件判断后直接停止,所以++y不运行,if直接输出为真,所以x = 11,y = 5;
2.
答:第一个if的第一个条件判断为后++,先判断,后自增,所以第一个条件判断为true,然后z=47,而后判断第二个条件,为false,所以if输出为false,所以第一个if运行完之后,z = 47;
第二个if的第一个条件判断为假,随后判断第二个条件,++z == 49,先自增,后判断,所以此时
z = 48,两个全为false,所以if输出为false,不输出其内容,最后,println z= 48,答错了,诶嘿。
在第一个if语句的第一个条件判断都分析正确,z=47,且判断为false,但我在第二个条件判断出错,此时的y = ture是赋值语句,而不是==,所以这里直接就是true了,所以if语句判断为true,执行z++,所以z=48,同理,下一句也是直接赋值为false,随后判断后一句,++z = 49 为true,执行z++,所以最后的结果z = 50。
总结
算术运算符中的取模公式 a%b = a - a / b * b
在非独立语句中,前+与后+有很大的差别
关系运算符和逻辑运算符都是输出boolean型数据