java运算符笔记源码Word下载.docx
《java运算符笔记源码Word下载.docx》由会员分享,可在线阅读,更多相关《java运算符笔记源码Word下载.docx(18页珍藏版)》请在冰点文库上搜索。
放在操作数的前面,先自增或者自减,然后再参与运算。
放在操作数的后面,先参与运算,再自增或者自减。
作用:
就是对变量进行自增1或者自减1。
classOperatorDemo2{
publicstaticvoidmain(String[]args){
//定义两个变量
intx=3;
inty=4;
//字符串的拼接
//System.out.println("
x:
"
+x);
y:
+y);
System.out.println("
+x+"
y:
//单独使用
//x++;
//y--;
++x;
--y;
//System.out.println(x);
//意外的类型,常量是不可以这样做的
//System.out.println(10++);
-------------------"
);
//参与运算使用
inta=3;
intb=4;
//intc=a++;
//intd=b--;
intc=++a;
intd=--b;
a:
+a);
//4,4
b:
+b);
//3,3
c:
+c);
//3,4
d:
+d);
//4,3
}
3+的正确用法
+的用法:
加法
正号
C:
字符串连接符
classOperatorDemo3{
//加法
System.out.println(3+4);
//正号
System.out.println(+4);
System.out.println('
a'
+1);
//这里是加法
//字符串连接符
System.out.println("
hello"
+'
+1+"
4++,--
++,--的练习题
第一题:
inta=10;
intb=10;
intc=10;
a=b++;
c=--a;
b=++a;
a=c--;
请分别计算出a,b,c的值
第二题:
intx=4;
inty=(x++)+(++x)+(x*10);
请分别计算出x,y的值
classOperatorTest{
inta=10;
intb=10;
intc=10;
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
--------------"
intx=4;
inty=(x++)+(++x)+(x*10);
//4+6+60
//x=5,6
5赋值运算符
赋值运算符:
基本的赋值运算符:
=
把=右边的数据赋值给左边。
扩展的赋值运算符:
+=,-=,*=,/=,%=
+=把左边和右边做加法,然后赋值给左边。
//定义一个变量
intx=10;
//其他用法
inta,b;
a=b=10;
System.out.println(a);
System.out.println(b);
-----------"
inty=10;
y+=20;
System.out.println(y);
面试题:
shorts=1;
s=s+1;
s+=1;
上面两个代码有没有问题,如果有,那里有问题。
为什么第二个木有问题呢?
扩展的赋值运算符其实隐含了一个强制类型转换。
s+=1;
不是等价于s=s+1;
而是等价于s=(s的数据类型)(s+1);
//shorts=1;
//s=s+1;
//System.out.println(s);
shorts=1;
s+=1;
//好像是s=s+1;
System.out.println(s);
6比较运算符
比较运算符:
==,!
=,>
>
=,<
<
特点:
无论你的操作是简单还是复杂,结果是boolean类型。
"
=="
不能写成"
="
。
intz=3;
System.out.println(x==y);
System.out.println(x==z);
System.out.println((x+y)==(x+z));
------------"
System.out.println(x!
=y);
System.out.println(x>
y);
System.out.println(x<
intb=20;
//booleanflag=(a==b);
//booleanflag=(a=b);
//这个是有问题的,不兼容的类型
//System.out.println(flag);
intc=(a=b);
//把b赋值给a,然后把a留下来
System.out.println(c);
7逻辑运算符
逻辑运算符:
&
|,^,!
&
||
逻辑运算符一般用于连接boolean类型的表达式或者值。
表达式:
就是用运算符把常量或者变量连接起来的符合java语法的式子。
算术表达式:
a+b
比较表达式:
a==b
结论:
逻辑与:
有false则false。
|逻辑或:
有true则true。
^逻辑异或:
相同为false,不同为true。
举例:
情侣关系。
男男,男女,女男,女女
!
逻辑非:
非false则true,非true则false。
特点:
偶数个不改变本身。
inta=3;
intb=4;
intc=5;
//&
逻辑与
System.out.println((a>
b)&
(a>
c));
//false&
false=false
(a<
true=false
System.out.println((a<
//true&
true=true
---------------"
//|逻辑或
b)|(a>
//false|false=false
b)|(a<
//false|true=true
//true|false=true
//true|true=true
//^逻辑异或
b)^(a>
//false^false=false
b)^(a<
//false^true=true
//true^false=true
//true^true=false
//!
逻辑非
System.out.println(!
(a>
b));
//!
false=true
(a<
true=false
!
false=false
8&
和&
区别
&
的区别?
同理||和|的区别?
最终结果一样。
具有短路效果。
左边是false,右边不执行。
开发中常用的逻辑运算符:
||,!
双与
----------------"
//booleanb1=((x++==3)&
(y++==4));
//booleanb1=((++x==3)&
booleanb1=((++x==3)&
System.out.println(b1);
9位运算符
位运算符:
|,^,~
<
<
>
注意:
要做位运算,首先要把数据转换为二进制。
System.out.println(3&
4);
System.out.println(3|4);
System.out.println(3^4);
System.out.println(~3);
分析:
因为是位运算,所以我们必须先把数据换算成二进制。
3的二进制:
11
00000000000000000000000000000011
4的二进制:
100
00000000000000000000000000000100
位与运算:
有0则0。
00000000000000000000000000000100
-----------------------------------
00000000000000000000000000000000
结果是:
|位或运算:
有1则1。
|00000000000000000000000000000100
00000000000000000000000000000111
7
^位异或运算:
相同则0,不同则1。
~按位取反运算符:
0变1,1变0
~11111111111111111111111111111100(补码)
补码:
11111111111111111111111111111100
反码:
11111111111111111111111111111011
原码:
10000000000000000000000000000100
-4
10~的特点
^的特点:
一个数据对另一个数据位异或两次,该数本身不变。
System.out.println(a^b^b);
//10
System.out.println(a^b^a);
//20
11>
<
:
左移左边最高位丢弃,右边补齐0
>
右移最高位是0,左边补齐0;
最高为是1,左边补齐1
无符号右移无论最高位是0还是1,左边补齐0
请用最有效率的方式写出计算2乘以8的结果?
2*8
2<
3
//<
把<
左边的数据乘以2的移动次幂
System.out.println(3<
2);
//3*2^2=3*4=12;
//>
把>
左边的数据除以2的移动次幂
System.out.println(24>
//24/2^2=24/4=6
System.out.println(-24>
计算出3的二进制:
(00)00000000000000000000000000001100
的移动:
计算出24的二进制:
11000
原码:
10000000000000000000000000011000
反码:
11111111111111111111111111100111
补码:
11111111111111111111111111101000
11111111111111111111111111101000
11111111111111111111111111111010(00)补码
11111111111111111111111111111010
11111111111111111111111111111001
10000000000000000000000000000110
结果:
-6
计算出24的二进制:
00111111111111111111111111111010(00)
12
请自己实现两个整数变量的交换
注意:
以后讲课的过程中,我没有明确指定数据的类型,默认int类型。
+a+"
b:
//方式1:
使用第三方变量(开发中用的)
/*
intc=a;
a=b;
b=c;
*/
//方式2:
用位异或实现(面试用)
//左边:
a,b,a
//右边:
a^b
a=a^b;
b=a^b;
//a^b^b=a
//a^b^a=b
//方式3:
用变量相加的做法
a=a+