【JAVA】|JAVA语言基础----运算符

运算符

1、算数运算符

算数运算符
+ - * / % ++ –
++、–
使用方式:单独使用 参与运算
1、当++、–出现在操作数的后面时,先传值再自加1/自减1
2、当++、–出现在操作数的前面时,先自加1/自减1再传值

public class SuanShu {

	public static void main(String[] args) {
		//操作+
		int a = 3;
		int b = 4;
		//+(求和、字符串连接符 )
		System.out.println(a+b);//求和
		//数值类型数据和字符进行求和时先把字符转成对应的编码值进行求和
		System.out.println(a+'a');
		//字符串常量可以和任意数据进行拼接
		System.out.println(a+"a"+'a');
		
		
		
		//操作-
		//0.20000000000000018  不是精确结果
		//小数没有精确运算
		double d = 2.1 - 1.9;
		System.out.println(d);
		
		
		
		//   操作/
		int e = 6;
		int f = 2;
		//ArithmeticException----算数异常
		//System.out.println(e/0);
		//Infinity----正无穷大
		//-Infinity----负无穷大
		//java支持小数除0
		System.out.println(-a*1.0/0);
		//NaN----Not A Number不是一个数  0/0.0   0.0/0.0 
		System.out.println(0.0/0);
		//0----
		//当参与操作的都是整型数据结果依然是一个整型数
		System.out.println(2/4);
		//当参与操作的数据出现小数结果就是小数
		System.out.println(2*1.0/4);
		
		
		
		//操作%
		int j = 3;
		int h = 4;
		//%左边数据的正负决定了结果的正负
		System.out.println(j%h);
		System.out.println(-j%h);
		System.out.println(j%-h);
		System.out.println(-j%-h);
		
		
		
		//操作++ 、--
		int a1 = 3;
		int b1 = --a;//参与运算
		//System.out.println(a++);//单独使用
		System.out.println(++a);//单独使用
		System.out.println(a); 
           //左边变量值改变之后会影响到右边变量的值
           //a = 3 4 3 2 3 
		int c = a++ + (--a) + (a--) + (++a);
		System.out.println(c);//12
		
		//byte,short,char做++ -- 时底层会默认添加强制类型转换
		byte b2 = 127;
		b2++;
		short s = -32768;
		s--;
		System.out.println(s);
		System.out.println(b2);
		
		

	}

}

2、赋值运算符
赋值运算符
= 把右边的值赋给左边
扩展赋值运算符(底层强制类型转换)
+= -= *= /= %=
&=(按位与等) |=(按位或等) ^=(按位异或等) >>=(右移等)
<<=(左移等) >>>=(无符号右移等)

public class FuZhi {

	public static void main(String[] args) {
		//定义变量
		int a = 3;
		int b = 4;
		a += b;//a = a+b
		
		//byte b1 = 2;
		//b1 = b1 + 3;
		//b1 = b1+3;b1+3为int类型
		//b1 += 3;//底层默认添加强制类型转换
		System.out.println(a);//7

		
		
		//支持定义形式
		//int a1 = 3,b1 = 3,c = 3;
		//不支持连等定义
		//int a1=b1=c1=3;
		//支持连等赋值
		int a1 = 3;
		//展开从右往左计算
		//b1 = 3+= 3-= 3 = 3*5 =15
		//b1 = 3+ = 3 = 3-15 = -12
		//b1 = 3 = 3+(-12) = -9
		//int b1= a1+= a1-= a1*= 5;
		
		
		//b1 = 3+= 3-= 3*=3++
		//右边变量的值改变了 不会影响左边已经编译好的值
		int b1 = a1+= a1-= a1*= a1++;
		System.out.println(b1);
	}

}


3、关系(比较)运算符
关系(比较)运算符(结果值一定是布尔值 true/false)
  		== !=  >  <  >=  <=  
public class BiJiao {

	public static void main(String[] args) {
		//操作==
		System.out.println(2 == 4);
		//操作>=
		System.out.println(5 >= 0);
		//操作!=
		System.out.println(4 != 5);

	}

}

4、逻辑运算符

逻辑运算符
连接左右两边布尔值
&(逻辑与) |(逻辑或) ^(逻辑异或) !(逻辑非)
&&(双与) ||(双或)
总结:
1、&---->遇见false则false
2、|---->遇见true则true
3、^---->同名false,异名true(同名相斥 异名相吸)
4、!---->结果值取反(当出现偶数个时结果不变)

	&&   ||------>常用
	5、&&---->&&和&运算规律一致,但是当&&左边出现false时,右边默认不执行——短路效果
	6、||---->||和|运算规律一致,但是当||左边出现true时,右边默认不执行——短路效果
public class LuoJi {

	public static void main(String[] args) {
		//定义变量
		int a = 1;
		int b = 2;
		int c = 3;
		
		//操作&
		System.out.println((a>b)&(b>c));//false & false
		//false
		System.out.println((a>b)&(b<c));//false & true
		//false
		System.out.println((a<b)&(b>c));//true & false
		//false
		System.out.println((a<b)&(b<c));//true & true
		//true
		
		System.out.println("--------------------------------------");
		//
		System.out.println((a>b)|(b>c));//false | false
		//false
		System.out.println((a>b)|(b<c));//false | true
		//true
		System.out.println((a<b)|(b>c));//true | false
		//true
		System.out.println((a<b)|(b<c));//true | true
		//true
		
		
		System.out.println("--------------------------------------");
		//
		System.out.println((a>b)^(b>c));//false ^ false
		//false
		System.out.println((a>b)^(b<c));//false ^ true
		//true
		System.out.println((a<b)^(b>c));//true ^ false
		//true
		System.out.println((a<b)^(b<c));//true ^ true
		//false
		
		
		System.out.println("--------------------------------------");
		System.out.println(!(!(b>c)));//false
		//true
		
		
		System.out.println("--------------------------------------");
		//和逻辑与的运算规律一致
		System.out.println((a>b)&&(b>c));//false && false
		//false
		System.out.println((a>b)&&(b<c));//false && true
		//false
		System.out.println((a<b)&&(b>c));//true && false
		//false
		System.out.println((a<b)&&(b<c));//true && true
		//true
		
		
		System.out.println("--------------------------------------");
		// a=1 b=2 c=3
		//||出现在双与左边且||出现短路,就会把后面的内容以及&&都短路掉
		System.out.println((false)&&(a++ == b)||(b > c--));
		System.out.println(a);
		System.out.println(c);
		
		
		System.out.println("--------------------------------------");

		

	}

}

5、位运算符
位运算符
数据转成二进制的补码形式
&(按位与) |(按位或) ^(按位异或) ~(按位取反)
>>(右移) <<(左移) >>>(无符号右移)

public class Wei {

	public static void main(String[] args) {
		//定义变量
		int a = 2;
		int b = 3;
		//操作&
		System.out.println(a&b);//2
		//操作|
		System.out.println(a|b);//3
		//操作^
		System.out.println(a^b);//1
		//操作~
		System.out.println(~a);//-3
	}

}
/*
 *         00000000 00000000 00000000 00000010 int 2补码
 *         00000000 00000000 00000000 00000011 int 3补码
 *         
 *         
 *         //操作& 遇0则0 任意整数&1==0 一定是偶数
 *         //任意整数&正数 一定是正数
 *         00000000 00000000 00000000 00000010 
 *         00000000 00000000 00000000 00000011 
 *         -----------------------------------
 *         00000000 00000000 00000000 00000010  2
 *         
 *         
 *         //操作| 遇1则1 任意整数|0 一定是本身
 *         //任意整数|负数   一定是负数
 *         00000000 00000000 00000000 00000010 
 *         00000000 00000000 00000000 00000011 
 *         -----------------------------------
 *         00000000 00000000 00000000 00000011  3
 *         
 *         
 *         //操作^ 相同则0 不同则1
 *         //任意一个整数^0 结果还是本身
 *         00000000 00000000 00000000 00000010 
 *         00000000 00000000 00000000 00000011 
 *         -----------------------------------
 *         00000000 00000000 00000000 00000001  1
 *         
 *         
 *         //操作~ 
 *         //所有位按位取反
 *         00000000 00000000 00000000 00000010 
 *         -----------------------------------
 *         11111111 11111111 11111111 11111101  负数  补码
 *         -----------------------------------
 *         11111111 11111111 11111111 11111100  反码
 *         -----------------------------------
 *         10000000 00000000 00000000 00000011  原码  -3
 *         
 * */
/**
 * 按位异或的扩展结论(当一个整数按位异或上另一个整数两次,结果还是本身)
 * @author tarena
 *
 */
public class Wei1 {

	public static void main(String[] args) {
		int a = 2;
		int b = 5;
		System.out.println(a^b^a);//5
		System.out.println(b^a^b);//2

	}

}



/**
 * 需求:两个数值交换
 * 
 * 		效率高低:按位异或(整数)>求和(一般是整数)>中间变量(常用  任意数据、简单)
 * @author tarena
 *
 */
public class Wei2 {

	public static void main(String[] args) {
		//定义变量
		int a = 4;
		int b = 5;
		
		
		//
		System.out.println("a的值:"+a+",b的值:"+b);
		
		//1、中间变量
		/*int temp = a;
		a=b;
		b=temp;
		//
		System.out.println("a的值:"+a+",b的值:"+b);
		*/
		System.out.println("--------------------");
		
		//2、按位异或(效率最高)
		/*a = a^b;
		b = a^b;//b = a^b^b=a
		a = a^b;//a = a^b^a=b
		System.out.println("a的值:"+a+",b的值:"+b);*/
		
		//3、求和
		a = a+b;
		b = a-b;//b=a+b-b = a
		a = a-b;//a=a+b-a = b
		//
		System.out.println("a的值:"+a+",b的值:"+b);

	}

}




位运算符
  		>>(右移)    <<(左移)    >>>(无符号右移)
  		>>(右移):当正数进行右移时,右移几位就在最左边位(最高位)补上几个0
 				          当负数进行右移时,右移几位就在最高位补上几个1
  		<<(左移):无论正负数进行左移时,左移几位就在最低位(最右边位)补上几个0
  		>>>(无符号右移):无论正负数进行右移时,右移几位就在最高位补上几个0
public class Wei3 {

	public static void main(String[] args) {
		//
		int a = 12;
		//操作>> a/2^移动位数
		System.out.println(a>>2);//3
		//操作<< a*2^移动位数
		System.out.println(a<<2);//48
		//操作>>> 结果一定是正数
		System.out.println(a>>>2);//3

	}

}



/*
 *             00000000 00000000 00000000 00001100 int 12补码
 *             
 *             []补位
 *             ()
 *             
 *             //操作右移>>2
 *             00000000 00000000 00000000 00001100
 *             -----------------------------------------
 *             [00]00000000 00000000 00000000 000011(00)
 *             -----------------------------------------
 *             00000000 00000000 00000000 00000011   3
 *             
 *             
 *             //操作左移>>2
 *             00000000 00000000 00000000 00001100
 *             -----------------------------------------
 *             (00)000000 00000000 00000000 00001100[00]
 *             -----------------------------------------
 *             000000000 00000000 00000000 00110000  48
 *             
 *             //操作无符号右移>>>2
 *             00000000 00000000 00000000 00001100
 *             -----------------------------------------
 *             [00]00000000 00000000 00000000 000011(00)
 *             -----------------------------------------
 *             00000000 00000000 00000000 00000011   3
 * 
 * */

6、三目(元)运算符
三目(元)运算符(结果一定是一个值)
格式:
布尔表达式?表达式值1:表达式值2
流程
先计算出布尔表达式的值,
如果是true,返回表达式值1
如果是false,则返回表达式值2

public class SanMu {

	public static void main(String[] args) {
		//求两个整数的最大值
		int a = 1;
		int b = 2;
		//把三目的返回值赋值给新变量
		//两个表达式值得类型要小于等于接收值的类型
		//三目嵌套
		int max = a > b?'a':b;
		System.out.println(max);
		
		
		
		//求三个整数最大值
		int c = 3;
		//
		System.out.println(a>b?(a>c?a:c):(b>c?b:c));
		
		System.out.println(1>3-2);

	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值