运算符
算数运算符

+,-,,/都是比较简单的操作,简单演示即可
+的几种作用:
加法
正数
字符串连接符
除法的时候要注意一个问题:
整数相除,只能得到整数
要想得到小数,可以1.0
/和%的区别
++和--的应用
单独使用效果相同
参与运算使用,在操作数的前后效果不同
i++和++i的差别
i++是先赋值再+
++i是先++再赋值
赋值运算符
符号:
= , +=, -=, *=, /=, %=
=为基本的赋值运算符,其他的为扩展的赋值运算符
关系运算符

注1:比较运算符的结果都是boolean型,也就是要么是true,要么是false。
注2:比较运算符“==”不能误写成“=” 。
逻辑运算符

逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6 。
“&”和“&&”的区别:
单&时,左边无论真假,右边都进行运算;
双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
“|”和“||”的区别同理,双或时,左边为真,右边不参与运算。
异或( ^ )与或( | )的不同之处是:当左右都为true时,结果为false
public class OptLuoJiDemo1 {
public static void main(String[] args) {
int a = 3;
int b = 4;
int c = 5;
//&逻辑与运算
System.out.println((a>b) & (a>c)); //false
System.out.println((a>b) & (a<c)); //false
System.out.println((a<b) & (a>c)); //false
System.out.println((a<b) & (a<c)); //true
//|逻辑或运算
System.out.println((a>b) | (a>c)); //false
System.out.println((a>b) | (a<c)); //true
System.out.println((a<b) | (a>c)); //true
System.out.println((a<b) | (a<c)); //true
//^逻辑异或运算
System.out.println((a>b) ^ (a>c)); // false
System.out.println((a>b) ^ (a<c)); // true
System.out.println((a<b) ^ (a>c)); // true
System.out.println((a<b) ^ (a<c)); // false
//!逻辑非运算
System.out.println(!((a>b) ^ (a>c))); // true
System.out.println(!((a>b) ^ (a<c))); // false
}
}
public class OptLuojiDemo2 {
public static void main(String[] args) {
int a = 3;
int b = 4;
int c = 5;
//&&双与
System.out.println((a > b) && (a > c)); //false && false = false
System.out.println((a > b) && (a < c)); //false && true = false
System.out.println((a < b) && (a > c)); //true && false = false
System.out.println((a < b) && (a < c)); //true && true = true
//&逻辑与运算
System.out.println((a>b) & (a>c)); //false
System.out.println((a>b) & (a<c)); //false
System.out.println((a<b) & (a>c)); //false
System.out.println((a<b) & (a<c)); //true
int x = 3;
int y = 4;
// boolean b1 = ((x++ == 3) & (y-- == 4));//x:3 y:4
// System.out.println("x:"+x);
// System.out.println("y:"+y);
// System.out.println("b1:"+b1); //true
// boolean b2 = ((x++ == 3) && (y++ == 4));
// System.out.println("x:"+x);
// System.out.println("y:"+y);
// System.out.println("b2:"+b2);//true
// boolean b2 = ((x++ == 6) && (y++ == 4));//左边为假,右边未参与运算
// System.out.println("x:"+x);
// System.out.println("y:"+y);
// System.out.println("b2:"+b2);
// boolean b1 = ((x++ == 6) & (y++ == 4));//无论真假,都进行运算
// System.out.println("x:" + x);
// System.out.println("y:" + y);
// System.out.println("b1:" + b1); //false
// boolean b1 = ((x++ == 6) | (y++ == 4));
// System.out.println("x:" + x);
// System.out.println("y:" + y);
// System.out.println("b1:" + b1); //true
// boolean b1 = ((x++ == 3) || (y++ == 4));
// System.out.println("x:" + x);
// System.out.println("y:" + y);
// System.out.println("b1:" + b1); //true
位运算符

位运算是直接对二进制进行运算。
/*
位运算:
>>,>>>,<<,&,|,^,~
想要进行位运算,就得先知道二进制
*/
public class OptWeiYunSuanDemo1 {
public static void main(String[] args) {
int x = 3;
int y = 4;
System.out.println(x & y);
System.out.println(x | y);
System.out.println(x ^ y);
System.out.println(~x);
}
}
/*
分析:
想要进行位运算,就得先知道二进制
3的二进制:11
4的二进制:100
3的原码,反码,补码:00000000 00000000 00000000 00000011
4的原码,反码,补码: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
符号位 数值位
原码: 1 1111111 11111111 11111111 11111100
反码: 1 0000000 00000000 00000000 00000011
补码: 1 0000000 00000000 00000000 00000100
结果是-4
*/
/*
<<,>>,>>>
<<左移:左边最高位丢弃,右边补齐0
>>右移:最高位是0,左边补0,最高位是1,左边补1
>>>无符号右移:无论最高位是0还是1,左边都用0补齐
*/
public class OptWeiYunSuanDemo2 {
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(56 >> 4); //56 / 2^4 = 56/16 = 3
System.out.println(5 << 3); // 5 * 2^3 = 5 * 8 = 40
System.out.println(-24 >> 2);
System.out.println(-24 >>> 2);
}
}
/*
分析:
要想参与位运算,就必须先得知道二进制
1、计算出3的二进制:11
00000000 00000000 00000000 00000011
(00)000000 00000000 00000000 0000001100
结果是:12
2、计算出24的二进制:11000
00000000 00000000 00000000 00011000
0000000000 00000000 00000000 000110(00)
结果是:6
3、计算出24的二进制:11000
00000000 00000000 00000000 00011000
0000000000 00000000 00000000 000110(00)
结果是:6
4、计算出24的二进制:11000
原码:10000000 00000000 00000000 00011000
反码:11111111 11111111 11111111 11100111
补码:11111111 11111111 11111111 11101000
1111111111 11111111 11111111 111010(00) 补码
补码:1111111111 11111111 11111111 111010
反码:1111111111 11111111 11111111 111001
原码:1000000000 00000000 00000000 000110
结果是:-6
5、计算出24的二进制:11000
原码:10000000 00000000 00000000 00011000
反码:11111111 11111111 11111111 11100111
补码:11111111 11111111 11111111 11101000
0011111111 11111111 11111111 111010(00) 补码
结果是:
*/
/*
两个数值AB异或,其中A异或两次B,其值依旧是
*/
public class OptWeiYunSuanDemo3 {
public static void main(String[] args) {
int a = 3;
int b = 4;
System.out.println(a^b^b);
System.out.println(a^b^a);
}
}
面试题
请用最有效率的方式写出计算2乘以8的结果(位运算)
8=2^3(左移3位)
00000000 00000000 00000000 00000010
(000)00000000 00000000 00000000 00010000 =16
实现两个整数变量的交换(四种方法)
public class FourWay {
public static void main(String[] args) {
//第一种引入第三个变量
int a=5;
int b=6;
int temp;
temp=a;
a=b;
b=temp;
System.out.println("交换前a:5"+"b:6"+"交换后a:"+a+"b:"+b);
//算数符的优先级
int i=1;
int j=2;
j=(i+j)-(i=j);
System.out.println("交换前i:1"+"j:2"+"交换后i:"+i+"j:"+j);
//变量相加(顺序结构)
int c = 4;
int d = 5;
c=c+d;
d=c-d;
c=c-d;
System.out.println("交换前c:4"+"d:5"+"交换后c:"+c+"d:"+d);
//位或运算
int e = 6;
int f = 7;
e=e^f;
f=e^f;
e=e^f;
System.out.println("交换前e:6"+"f:7"+"交换后e:"+e+"f:"+f);
}
}
^的特点
三目运算符
格式
(关系表达式)?表达式1:表达式2;
如果条件为true,运算后的结果是表达式1;
如果条件为false,运算后的结果是表达式2;
示例:
获取两个数中大数。
int x=3,y=4,z;
z = (x>y)?x:y;//z变量存储的就是两个数的大数。
浙公网安备 33010602011771号