/*
运算符:
算术运算符: +,-,*,/,%,++,--
赋值运算符 =
一个=是赋值运算符,==是关系运算符
扩展赋值运算符:+=,-=,*=,/=
关系运算符: >,<,>=,<=,==,!=
两边一般都不是具体的值,而是表达式
逻辑运算符: &&,||,!
位运算符: &,|,^,~ , >>,<<,>>> (了解!!!)
条件运算符 ?:
*/
public class OperatorDemo{
public static void main(String[] args){
int a = 1;
int b = 2;
//算术运算符
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
//取整除,或者取商
System.out.println(a/b);
//取余数,或者取模
System.out.println(a%b);
//给一个4位数,对应取出个位、十位、百位、千位数字?
int i = 2345;//?
//++:单目运算符,自加1操作,如果++在前面,先自加,再运算
// 如果++在后面,先运算,再自加
System.out.println(a++);
System.out.println(++a);
//--:单目运算符,自减1操作,如果--在前面,先自减,再运算
// 如果--在后面,先运算,再自减
//System.out.println(a--);
//System.out.println(--a);
//面试题:运算符的优先级的问题 ++优先级是大于+
System.out.println(++b+b++);//? 6
System.out.println("-------------------");
System.out.println(b);//4
//扩展运算符
int c = 1;
//两种写法的结果是一样的,都是做+2操作
//建议操作的时候都使用扩展运算符
//c = c + 2;
c += 2;
//基本数据类型的转换:byte类型的d,当它+20的时候,等号右边变成了int类型,左边是byte类型,
// 大范围向小范围转型需要强制转换 写法:(datatype)
byte d = 10;
//d = d + 20;
d += 20;
System.out.println(d);
//关系运算符
System.out.println(2>3);
System.out.println(2<3);
System.out.println(2>=3);
System.out.println(2<=3);
System.out.println(2==3);
System.out.println(2!=3);
//逻辑运算符
/*
&&:短路与,当第一个表达式是false,那么后面的表达式就不再执行了
||:短路或,当第一个表达式是true,那么后面的表达式就不再执行了
&:逻辑与,不管第一表达式返回true还是false,两边的表达式都会执行
|:逻辑或,不管第一表达式返回true还是false,两边的表达式都会执行
*/
int aa = 1;
//System.out.println(2 > 3 && 5 > aa++);
System.out.println(2 > 3 & 5 > aa++);
System.out.println(aa);
System.out.println(2 > 3 || 5 > 4);
System.out.println(!false);
System.out.println(!true);
//位运算符
System.out.println(4 & 5);//4
System.out.println(4 | 5);//5
System.out.println(4 ^ 5);//1
//移码 原码 反码 补码
System.out.println(~4);//-5 ??
//位运算符:
/*
>>:无符号右移,除2操作,移动几位就除以几个2
<<:无符号左移,乘2操作,移动几位就乘以几个2
>>>:有符号右移
*/
//把2变成16的最高效的方法是什么?
System.out.println(2 << 3);
System.out.println(16 >> 3);
//条件运算符:三目运算符
// 第一个表达式返回为true,则取?后的值,反之,取:后的值。
System.out.println( 2 < 3 ? 2 : 3);
System.out.println(false ? false : true ? false : true);
/*
基本数据类型之间的转换:
1、一般写代码的时候,都是使用同一种数据类型,低位会向高位自动转换(隐式转换)
2、在同一种数据类型转换的时候,高位向低位不会自动转换,需要使用强制转换
3、强制转换会数据精度的丢失
*/
byte x = 10;
x = (byte)(x + 20);
//int y = x + 20;
System.out.println(x);
System.out.println((byte)270);//14
}
}