java基础04 运算符 逻辑运算符
-
算术运算符:+, - ,*, /, %, ++, --
-
赋值运算符:=
-
关系运算符:> ,< ,>= ,<= ,== ,1= , instanceof
-
逻辑运算符:&& ,||, ! (与 ,或 ,非)
-
位运算符: & ,| , ^ , ~ , >> , << , >>>(了解!!!) (直接对二进制进行运算)
-
条件运算符(三元运算符):? :
-
扩展赋值运算符:+=,-=,*=,/= (a+=b // a=a+b )
- 自增自(减)运算符(单目运算符):++,--
-
单目运算符:1. 必须是一个整形或者浮点型变量。
2. a++ 先赋值,在自增, ++a 先自增,再赋值
public class Demo7
{
public static void main(String[] args)
{
int a= 3;
int b= a++;//执行完这行代码后,先给b赋值,在自增
//a=a+1;
System.out.println(a);
//a=a+1
int c=++a;//执行完这行代码前,先自增,再给b赋值
System.out.println(a);
//幂运算 2^3 ---> 2*2*2 很多运算,我们会使用一些工具类来操作
double pow= Math.pow(2, 3);
System.out.println(pow);
}
}
逻辑运算
-
&& :两个变量都为真,结果才为真 (左到右)
-
|| : 两个变量有一个为真,则结果才为真(左到右)
-
! :
public class Demo07
{
public static void main(String[] args)
{
//与(and) 或 (or)非(取反)
boolean a=true;
boolean b=false;
System.out.println("a && b:"+(a && b));//逻辑运算:两个变量都为真,结果才为真
System.out.println("a||b:"+(a||b));//逻辑运算:两个变量有一个为真,则结果才为真
System.out.println("!(a%%b):"+!(a&&b));//真变为假,假变为真
//短路运算
int c=5;
boolean d=(c<4)&&(c++<4);
System.out.println(d);
System.out.println(c);
}
}
位运算符:1. (<< ) 左移 如:3<<2=12--->3* 2 *2=12 ,m<<n --->m *2的n次方
2.(>>) 右移 如:3>>1=1--->3/2=1 ,m>>n--->m *2的负n次方
3. (>>>)无符号右移 3>>>1=1--->3/2=1
4. 有符号的右移是看右移之后的首位是0还是1,是0前面空位补0,是1就补1
5. 无符号的右移,移动之后不管首位是0还是1,空位直接补1
6. (&)与运算 6&3=2 (两个为1,才为1,否则为0)
7. (|)或运算 6|3=7 (都为0结果为0,否则为1)
8. (^)异或运算 6^3=5
9. (~) 反码 ~7=-7 (取反)
字符串连接符 +,string (" 有string字符串在前,+号就做连接符")
public class Demo08
{
public static void main(String[] args)
{
/*
* A=0011 1100
* b=0000 1101
*
*与 A&B=0000 1100 两个为一才为一,否则为零
*或 A|B=0011 1101 都是零结果为零,否则为一
*异或 A^B=0011 0001 相同为零,否则为一
*取反 ~B=1111 0010 相反
*
* 面试题
* 2*8=16 2*2*2*2
* 效率极高!!!
* 左移<<*2
* 友移>>/2
* 0000 0000 0
* 0000 0001 1
* 0000 0010 2
* 0000 0011 3
* 0000 0100 4
* 0000 1000 8
* 0001 0000 10
*/
System.out.println(4>>1);
}
}
-
条件运算符(三元运算符):? :
例:x ? y : z(如果x=true,则结果为y,否则为z)
public class Demo09
{
public static void main(String[] args)
{
//x ? y:z
//如果x==true,则结果为y,否则结果为z
int score=80;
String type=score<60 ?"不及格":"及格";//必须掌握
//还有if
System.out.println(type);
}
}
package src1;
public class Demo28
{
public static void main(String[] args)
{
int m=1;
int n=2;
System.out.println(m>n ? m: n);//(条件表达式)? 表达式1 :表达式2
int k=0;//找三位数的比大小
//条件表达式m>n
//表达式1(m>k ? m : k)
//表达式2(n>k ? n : K)
System.out.println(m>n ? (m>k ? m:k ):(n>k ? n:k));//三目运算符也可以嵌套
}
}
-
instanceof运算符 (二目运算符):1. 测试对象创建左右声明类型其中一个测试类必须是继承树的同一分支或者存在继承的关系。
3. 左边对象是右边类或者子类创建对象时,结果时true,否则false。
用法:继承了一个子类,实例化了类。
System.out.println(类对象 instanceof 类) 。
占位符:printf("% _ d",);