【Java学习笔记4】基础语法Part Ⅲ:运算符

一、算数运算符

在这里插入图片描述
注意点:

  • 如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。 但被模数是负数则不可忽略。此外,取模运算的结果不一定总是整数。
  • 对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只 保留整数部分而舍弃小数部分。 例如:int x=3510;x=x/1000*1000; x的 结果是?
  • “+”除字符串相加功能外,还能把非字符串转换成字符串.例如: System.out.println(“5+5=”+5+5); //打印结果是? 5+5=55 ?

使用例:

int num1=10, num2=5;  
int result;//存放结果  
//加法  
result=num1+num2;  
System.out.println(num1+"+"+num2+"="+result);//10+5=15  
//字符串连接  
System.out.println(""+num1+num2);//105  
//减法  
result=num1-num2;  
System.out.println(num1+"-"+num2+"="+result);//10-5=5  
//乘法  
result=num1*num2;  
System.out.println(num1+"*"+num2+"="+result);//10*5=50  
//除法  
result=num1/num2;  
System.out.println(num1+"/"+num2+"="+result);//10/5=2  
//分子分母都是整型时,结果为整除后的结果  
System.out.println(13/5);//2  
System.out.println("13.0/5"+13.0/5);//13.0/52.6  
//求余数  
result=13/num2;  
System.out.println("13%"+num2+"="+result);//13%5=2 
System.out.println("13.5%5="+(13.5%5));//13.5%5=3.5 
// -----------------------------------------------
// x++的形式  
int x=4;  
int y=(x++)+5;  
System.out.println("x="+x+",y="+y);//x=5,y=9  
//++x的形式  
x=4;  
y=(++x)+5;  
System.out.println("x="+x+",y="+y);//x=5,y=10  
//x--的形式  
x=4;  
y=(x--)+5;  
System.out.println("x="+x+",y="+y);//x=3,y=9  
//--x的形式  
x=4;  
y=(--x)+5;  
System.out.println("x="+x+",y="+y);//x=3,y=8  

二、赋值运算符

符号:=;从右往左运算,左边不能是常量

当 “=” 两侧数据类型不一致时,可以使用自动类型转换或使用强制 类型转换原则进行处理。

支持连续赋值。

复合赋值运算符:+=、-=、*=、/=、%=;

注意:

  • +=,-=,/=,*=,%= 运算结果的数据类型和左侧变量的数据类型不一致,隐藏强制类型转换,不会改变左侧变量的数据类型
  • 整数常量只要不超出所赋值的整数变量的取值范围,可以直接赋值,内部隐藏强制类型转换
short s = 3;
//s = s+2;//编译不通过
s += 2; //5

int i = 1;
i *= 0.1;
System.out.println(i);//0
i++;
System.out.println(i);//1

int n1 = 10;
n1 += (n1++) + (++n1);
System.out.println(n1);//32

三、比较运算符(关系运算符)

运算符运算范例结果
==相等于4==3false
!=不等于4!=3true
<小于4<3false
>大于4>3true
<=小于等于4<=3false
>=大于等于4>=3true
instanceof检查是否是类的对象“Hello” instanceof Stringtrue

注意:

  • 比较运算符的结果都是boolean型,也就是要么是true,要么是false。
  • 比较运算符“==”不能误写成“=” 。
boolean b1 = false;
//区分好==和=的区别。
if(b1==true)//结果为假
	System.out.println("结果为真");
else
	System.out.println("结果为假");

boolean b1 = false;
//区分好==和=的区别。
if(b1=true)//结果为真
	System.out.println("结果为真");
else
	System.out.println("结果为假");

四、逻辑运算符

&:逻辑与

|:逻辑或

!:逻辑非

&&:短路与

||:短路或

^:逻辑异或

aba&ba&&ba|ba||b!aa^b
truetruetruetruetruetruefalsefalse
truefalsefalsefalsetruetruefalsetrue
falsetruefalsefalsetruetruetruetrue
falsefalsefalsefalsefalsefalsetruefalse

注意:

  • 逻辑运算符的操作数都是boolean类型
  • “&”和“&&”的区别:单&时,左边无论真假,右边都进行运算;双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
  • “|”和“||”的区别同理,||表示:当左边为真,右边不参与运算。
  • “&”和“&&”,“|”和“||”运算结果相同
int x1 = 1,y1 = 1;
if(x1++==2 & ++y1==2){
	x1 = 7;
}
System.out.println("x1="+x1+",y1="+y1);//x1=2,y1=2
//----------------------------------
int x2 = 1,y2 = 1;
if(x2++==2 && ++y2==2){
	x2 =7;
}
System.out.println("x2="+x2+",y2="+y2);//x2=2,y=1
//----------------------------------
int x3 = 1,y3 = 1;
if(x3++==1 | ++y3==1){
	x3 =7;
}
System.out.println("x3="+x3+",y3="+y3);//x3=7,y3=2
//----------------------------------
int x4 = 1,y4 = 1;
if(x4++==1 || ++y4==1){
	x4 = 7;
}
System.out.println("x4="+x4+",y4="+y4);//x4=7,y4=1

五、位运算符

位运算:直接对整数的二进制进行的运算。

运算符运算范例说明
<<左移3 << 2 = 12空位补0,被移除的高位丢弃,空缺位补0。
>>右移3 >> 1 = 1被移位的二进制最高位是0,右移后,空缺位补0; 最高位是1,空缺位补1。
>>>无符号右移3 >>> 1 = 1被移位二进制最高位无论是0或者是1,空缺位都用0补。
&与运算6 & 3 = 2二进制位进行&运算,只有1&1时结果是1,否则是0;
|或运算6|3 = 7二进制位进行|运算,只有0|0时结果是0,否则是1;
^异或运算6 ^ 3 = 5相同二进制位进行 ^ 运算,结果是0;1^1=0 , 0^0=0 不相同二进制位 ^ 运算结果是1。1^0=1 , 0^1=1
~取反运算~6 = -7正数取反,各二进制码按补码各位取反 负数取反,各二进制码按补码各位取反

注意:

  • 位运算符操作的都是整型数据
  • <<在一定范围内,每左移1位,相当于*2
  • >>在一定范围内,每右移1位,相当于/2
//练习:交换两个变量的值
int num1 = 10;
int num2 = 20;
System.out.println("num1 = " + num1 + ",num2 = " + num2);

//方式一:定义临时变量的方式
//推荐的方式
int temp = num1;
num1 = num2;
num2 = temp;

//方式二:好处:不用定义临时变量  
//弊端:① 相加操作可能超出存储范围 ② 有局限性:只能适用于数值类型
//num1 = num1 + num2;
//num2 = num1 - num2;
//num1 = num1 - num2;

//方式三:使用位运算符
//有局限性:只能适用于数值类型
//num1 = num1 ^ num2;
//num2 = num1 ^ num2;
//num1 = num1 ^ num2;
System.out.println("num1 = " + num1 + ",num2 = " + num2);

//-----------------------------------
//求一个0~255范围内的整数的十六进制,如60的十六进制表示是3C
//方式一:自动实现
String str1 = Integer.toBinaryString(60);
String str2 = Integer.toHexString(60);

//方式二:手动实现
int i1 = 60;
int i2 = i1&15;
String j = (i2 > 9)? (char)(i2-10 + 'A')+"" : i2+"";
int temp = i1 >>> 4;
i2 = temp & 15;
String k = (i2 > 9)? (char)(i2-10 + 'A')+"" : i2+"";
System.out.println(k+""+j);

六、三目运算符

格式:布尔表达式:表达式1?表达式2

说明:当布尔表达式值为true时,返回表达式1的值否则返回表达式2的值;表达式1和表达式2类型一致

三元运算符与if-else的联系与区别:

  1. 三元运算符可简化if-else语句。
  2. 三元运算符要求必须返回一个结果。
  3. if后的代码块可有多个语句。
//获取两个数中的较大数
int m = 12;
int n = 5;
int max = (m > n)? m : n;
System.out.println(max);
//获取三个数中的较大数
int n1 = 12;
int n2 = 30;
int n3 = -43;
int max1 = (n1 > n2)? n1 : n2;
int max2 = (max1 > n3)? max1 : n3;
System.out.println("三个数中的最大值为:" + max2);

七、运算符优先级

运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如下表,上一行运算符总优先于下一行。

运算方向运算符
. () {} ; ,
R→L++ – ~ !(data type)
L→R* / %
L→R+ -
L→R<< >> >>>
L→R< > <= >= instanceof
L→R== !=
L→R&
L→R^
L→R|
L→R&&
L→R||
R→L? :
R→L= *= /= %=
+= -= <<= >>=
>>>= &= ^=

只有单目运算符、三元运算符、 赋值运算符是从右向左运算的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值