package com.test;
public class Demo3 {
public static void main(String[] args) {
/*
* 运算符: A按照功能分类: 1.算数运算符:+ - * / ++(自增) --(自减)
* 2.赋值运算符:= += -= *= %= /=
* 3.关系运算符:== < > <= >= !=
* 4.逻辑运算符:&&(与) ||(或) !(非)
* 5.位运算符:直接操作的是位 &(按位与) |(按位或) ^(按位异或) ~(按位取反)
* 6.移位运算符:>>1(右移一位) <<1(左移一位)
* B按照运算符操作的元素个数分类 操作一个数:! ++ -- ~ -(负) +(正) 操作两个数:+ - * /
* 操作三个数:?:(三目运算符)
*/
// * A按照功能分类:
// * 1.算数运算符:+ - * / ++(自增) --(自减)
System.out.println(-3 * -2);
System.out.println(3 / -2);// 计算机中的除法与普通的一致,两个整数相除得到的商是整数,小数相除得到的才是小数
System.out.println(-3 % -2);// 榆余数的符号与被除数相同
// ++(自增) --(自减)
int a = 3, b = 2, c, d;
c = a++;
d = ++b;
System.out.println(a + " " + b + " " + c + " " + d);
// * 2.赋值运算符:= += -= *= %= /=
int w = 4, y = 4;// =是右结合性,优先级最低,最后算
y += 3;// y=y+3, 注意:一个变量在定义之后,必须先赋值再使用
// 实例:
int n = 2, m = 3, x, z = 1;
x = n++ - --m + (z++ - n--);
// 求x,n,m,z的值
System.out.println(x + " " + n + " " + m + " " + z);
/*
* 题目分析: 先考虑优先级,在考虑结合性,先考虑优先级低的运算符, 使用排除法, 符合条件的优先级高的运算符找出来,再运算
*
* 1.先考虑=号,使用排除法,根据右结合性,去算=的右边 2.判断-+号,优先级最低并且相同,是左结合性 3.先算n++ 得n=3
* ,n++=2 4.--m 得m=2 ,--m=2 5.算() (1-3) ,z=2 n=2 6.算-+号 2-2+(1-3) 7.算=
* 得=-2
*/
// * 3.关系运算符:== < > <= >= !=
// 特点:结果只有ture/false
System.out.println(2 > 3);
System.out.println(2 == 3);
// * 4.逻辑运算符:&&(与) ||(或) !(非)
// 特点:结果只有两个,ture/flase
System.out.println(2 > 3 && 2 < 3);
/*
* &&(与):全真则真,一假则假 ||(或):全假则假,一整真则真 !(非):真则假,假则真
*
* 短路与:当多个&&连接的时候,从左往右运算的时候,只要有一个假,就停止运算,结果为假
* 短路或:当多个||连接的时候,从左往右运算的时候,只要有一个真,就停止运算,结果为真
*/
// 短路与注意点演示:问:运算结束,q的值是多少?
int q = 1;
boolean isture = 2 < 3 && 3 > 4 && 2 > 3 || q++ < 3;
System.out.println(isture + " " + q);
// 为什么使用位运算符? 原因:速度快效率高,因为直接操作的是二进制
// * 5.位运算符:直接操作的是位
// &(按位与) :全1则1,有0则0
// |(按位或) :全0则0,有1则1
// ^(按位异或) :运算的当前结果是0,不同结果是1
// ~(按位取反):0就是1,1就是0
// 交换两个数的值
// 方法一:借助于三方变量
int k1 = 3, k2 = 4, temp;
// temp=k1;
// k1=k2;
// k2=temp;
// 方法二:使用^运算,好处:不需要三方变量
k1 = k1 ^ k2;
k2 = k1 ^ k2;
k1 = k1 ^ k2;
System.out.println(k1 + " " + k2);
// * 6.移位运算符:>>1(右移一位):除以2; <<1(左移一位):乘以2; >>>1(无符号右移一位)
// * B按照运算符操作的元素个数分类
// *操作一个数:! ++ -- ~ -(负) +(正)
// *操作两个数:+ - * /
// *操作三个数:?:(三目运算符)
// 表达式:由运算符和变量组成的式子
// 语句:表达式+; 特殊:只写;也叫语句--空语句
// *操作三个数:?:(三目运算符) 表达式一 < 表达式二 ? 变量1 : 变量2
System.out.println(2 > 3 ? 2 : 3);
}
}