一:运算后结果的数据类型
byte short char 不能直接参加运算 需要自动提升为int
byte b1=1,b2=1;
short s1=1,s2=1;
char c1=1,c2=1;
// b1=b1+b2;//Type mismatch: cannot convert from int to byte
// //byte+byte=int
// b1=b1+s1;//byte+short=int
// b1=s1+c1;//short+char=int
运算后结果的数据类型取决于精度最高的数据
二: 运算符
2.1 算术运算符
已有的算术运算符:+ - * /
java特有的算术运算符:
1:+
2: %
3:++ --
- +作为加法号
System.out.println(1+1);//加法运算
- +作为正号
System.out.println(+1-(+2)-(-1));//表示正负
- 作为字符串连接符
System.out.println("12"+1+2);//"1212"
//字符串:打印输出语句中 带双引号的就是字符串
//字符串连接符:字符串前后的+就是字符串连接符
System.out.println(3+"abc"+1+2);//3+"abc"==="3abc"+1==="3abc1"+2==="3abc12"
//运算时 从左到右逐个运算
//任何数据与字符串连接 都是形成一个新的字符串
System.out.println("abc"+'a'+1.1+true+1+1.0f);
System.out.println(1/2);//0
System.out.println(1.0/2);
System.out.println('a'+'b');//195
System.out.println((char)('a'+'b'));
int a=1,b=2;
//a=1
System.out.println("a="+a);
//a=1,b=2
System.out.println("a="+a+",b="+b);
//a=1,b=2,a+b=3
System.out.println("a="+a+",b="+b+",a+b="+(a+b));
System.out.println("a="+a+",b="+b+",a+b="+(a+b)+"");
- % 求余 取模
//% 求余 取模
System.out.println("7%3="+(7%3));//1
System.out.println("8%3="+(8%3));//2
System.out.println("10%3="+(10%3));//1
System.out.println("2%3="+(2%3));//2
System.out.println("3%3="+(3%3));//0
//n%m= n除以m 得到一个整数 除不尽的那部分
//n%m 结果的取值范围 [0,m)
System.out.println("6.4%2.0="+(6.4%2.0));//0.4
System.out.println("-6.4%2.0="+(-6.4%2.0));//-0.4
System.out.println("6.4%(-2.0)="+(6.4%(-2.0)));//0.4
System.out.println("-6.4%(-2.0)="+(-6.4%(-2.0)));//-0.4
//余数是被除数的一部分 余数的正负取决于被除数
- ++自增 – 自减
//++自增 --自减
a=1;
a++;//等价于a=a+1;
System.out.println("a="+a);
byte b0=1;
b0++;//b++;完全等价于b=(b的类型)(b+1);
2.2 赋值运算符
/*赋值运算符
*已有的:= 把右边的值赋值给左边的变量
*java特有的:+= -= /= %= *=
* */
int a=1,b=2;
a+=b;//等价于a=a+b;
System.out.println("a="+a+",b="+b);
byte b1=1,b2=2;
b1+=b2;//a+=b 完全等价于:a=(a的类型)(a+b);
2.3 比较运算符
/*比较运算符:结果是boolean类型的值
*已有的:> >= < <=
*特有的:== 恒等号 判断两边的值是不是相等
* != 不等号 判断两边的值是不是不相等
* */
System.out.println(1>2);
System.out.println(1==2);
System.out.println(1!=2);
2.4 逻辑运算符
/*逻辑运算符:只能操作boolean数据 结果是boolean类型的数据
* & 单与
* && 双与 and
* 两边只要有一个false 结果就是false
* | 单或
* || 双或 or
* 两边只要有一个true 结果就是true
* ^ 异或
* 两边不同则为true 两边相同则为false
* ! 取反 非
*/
System.out.println("测试&");
System.out.println("true&false="+(true&false));//false
System.out.println("false&false="+(false&false));//false
System.out.println("true&true="+(true&true));//true
System.out.println("false&true="+(false&true));//false
int a=1,b=2,c=3;
System.out.println(a>b&&a>c);//判断a是最大的
System.out.println((a-b)*(a-c)<0);//a是中间值
System.out.println((a>b&&a<c)||(a>c&&a<b));//a是中间值
2.5 位运算符
/*位运算符:(了解)
* | & >> <<
* 位运算符操作的是整数的二进制
* 0作为false 1作为true
*/
System.out.println("(15|2)="+(15|2));//15
System.out.println("(15&2)="+(15&2));//2
System.out.println("(15<<2)="+(15<<2));//60
System.out.println("(15>>2)="+(15>>2));//3