运算符:
就是对常量和变量进行操作的符号。
分类:算术运算符,赋值运算符,比较运算符,逻辑运算符,位运算符,三目运算符
一、算术运算符:
+,-,*,/,%,++,--
注意事项:
1、整数相除只能得到整数。如果想得到小数,必须把数据变化为浮点数类型
2、/获取的是除法操作的商,%获取的是除法操作的余数
3、++,--运算符的使用:
1)、单独使用:
放在操作数的前面和后面效果一样。(这种用法是我们比较常见的)
eg:
int x = 3;
int y = 4;
//x++;
//y--;
//System.out.println("x:"+x+",y:"+y);//x:4,y:3
++x;
--y;
System.out.println("x:"+x+",y:"+y);//x:4,y:3
2)、参与运算使用:
放在操作数的前面,先自增或者自减,然后再参与运算。
放在操作数的后面,先参与运算,再自增或者自减。
eg:
int a = 3;
int b = 4;
//int c = a++;
//int d = b--;
int c = ++a;
int d = --b;
System.out.println("a:"+a); //4, 4
System.out.println("b:"+b); //3, 3
System.out.println("c:"+c); //3, 4
System.out.println("d:"+d); //4, 3
4、面试题
第一题:
int a = 10;
int b = 10;
int c = 10;
a = b++;
c = --a;
b = ++a;
a = c--;
请分别计算出a,b,c的值
a = b++; //a=10,b=11,c=10
c = --a; //a=9,b=11,c=9
b = ++a; //a=10,b=10,c=9
a = c--; //a=9,b=10,c=8
第二题:
int x = 4;
int y = (x++)+(++x)+(x*10);
请分别计算出x,y的值
int x = 4;
int y = (x++)+(++x)+(x*10);
//4+6+60
二、赋值运算符:
1、基本的赋值运算符:=
把=右边的数据赋值给左边。
2、扩展的赋值运算符:+=,-=,*=,/=,%=
+= 把左边和右边做加法,然后赋值给左边。
3、面试题:
short s=1;s = s+1;
short s=1;s+=1;
上面两个代码有没有问题,如果有,那里有问题。
为什么第二个木有问题呢?
扩展的赋值运算符其实隐含了一个强制类型转换。
s += 1;
不是等价于 s = s + 1;
而是等价于 s = (s的数据类型)(s + 1);
三、比较运算符:
==,!=,>,>=,<,<=
1、特点:
无论你的操作是简单还是复杂,结果是boolean类型。
2、注意事项:
"=="不能写成"="。
四、逻辑运算符:
&,|,^,!
&&,||
1、特点:
逻辑运算符一般用于连接boolean类型的表达式或者值。
在Java中不可以写成3<x<6,应该写成x>3 & x<6 。
2、表达式:就是用运算符把常量或者变量连接起来的符合java语法的式子。
算术表达式:a + b
比较表达式:a == b
3、结论:
1)&逻辑与:有false则false。
2)|逻辑或:有true则true。
3)^逻辑异或:相同为false,不同为true。
举例:情侣关系。男男,男女,女男,女女
4)!逻辑非:非false则true,非true则false。
特点:偶数个不改变本身。
4、&&和&的区别? 同理||和|的区别?
1)最终结果一样。
2)&&具有短路效果。左边是false,右边不执行。
3)开发中常用的逻辑运算符:
&&,||,!
五、位运算符:
&,|,^,~
<<,>>,>>>
注意:
要做位运算,首先要把数据转换为二进制的补码计算。
public static void main(String[] args) {
int a = 3;
int b = 4;
System.out.println(3 & 4);
System.out.println(3 | 4);
System.out.println(3 ^ 4);
System.out.println(~3);
}
分析:因为是位运算,所以我们必须先把数据换算成二进制。
3的二进制:11
00000000 00000000 00000000 00000011
4的二进制:100
00000000 00000000 00000000 00000100
&位与运算:有0则0。
00000000 00000000 00000000 00000011
&00000000 00000000 00000000 00000100
-----------------------------------
00000000 00000000 00000000 00000000
结果是:0
|位或运算:有1则1。
00000000 00000000 00000000 00000011
|00000000 00000000 00000000 00000100
-----------------------------------
00000000 00000000 00000000 00000111
结果是:7
^位异或运算:相同则0,不同则1。
00000000 00000000 00000000 00000011
&00000000 00000000 00000000 00000100
-----------------------------------
00000000 00000000 00000000 00000111
结果是:7
~按位取反运算符:0变1,1变0
00000000 00000000 00000000 00000011
~11111111 11111111 11111111 11111100 (补码)
补码:11111111 11111111 11111111 11111100
反码: 11111111 11111111 11111111 11111011
原码: 10000000 00000000 00000000 00000100
结果是:-4
<<:左移 左边最高位丢弃,右边补齐0
>>:右移 最高位是0,左边补齐0;最高为是1,左边补齐1
>>>:无符号右移 无论最高位是0还是1,左边补齐0
public static void main(String[] args) {
//<< 把<<左边的数据乘以2的移动次幂
System.out.println(3 << 2); //3*2^2 = 3*4 = 12;
//>> 把>>左边的数据除以2的移动次幂
System.out.println(24 >> 2); //24 / 2^2 = 24 / 4 = 6
System.out.println(24 >>> 2);
System.out.println(-24 >> 2);
System.out.println(-24 >>> 2);
}
分析:
计算出3的二进制:11
00000000 00000000 00000000 00000011
(00)000000 00000000 00000000 0000001100
>>的移动:
计算出24的二进制:11000
原码:10000000 00000000 00000000 00011000
反码:11111111 11111111 11111111 11100111
补码:11111111 11111111 11111111 11101000
11111111 11111111 11111111 11101000
1111111111 11111111 11111111 111010(00) 补码
补码:1111111111 11111111 11111111 111010
反码:1111111111 11111111 11111111 111001
原码:1000000000 00000000 00000000 000110
结果:-6
>>>的移动:
计算出24的二进制:11000
原码:10000000 00000000 00000000 00011000
反码:11111111 11111111 11111111 11100111
补码:11111111 11111111 11111111 11101000
11111111 11111111 11111111 11101000
0011111111 11111111 11111111 111010(00)
面试题:
1、请用最有效率的方式写出计算2乘以8的结果?
2 * 8
2 << 3
2、请自己实现两个整数变量的交换?
int a = 10;
int b = 20;
//方式1:使用第三方变量(开发中用的)
int c = a;
a = b;
b = c;
System.out.println("a:"+a+",b:"+b);
//方式2:用位异或实现(面试用)
a = a ^ b;
b = a ^ b; //a ^ b ^ b = a
a = a ^ b; //a ^ b ^ a = b
System.out.println("a:"+a+",b:"+b);
六、三目运算符:
1、格式:比较表达式?表达式1:表达式2;
比较表达式:结果是一个boolean类型。
2、执行流程:
根据比较表达式的计算返回一个true或者false。
如果是true,就把表达式1作为结果。
如果是false,就把表达式2作为结果。
Java integer 交换 java交换两个整数的值
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
java交换两个integer
简单的swap(integer i1.,integer i2),原本以为就是简单的对象之间的交换,
java 开发语言 后端 值传递 引用传递