java 会计算负数吗 java中的计算_java

运算符:

一.算术运算符:

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

class SuanShu{
	public static void main(String[] args) {
		//1.操作+;
		int a=3;
		int b=4;
		//+(求和、字符串连接符)
		System.out.println(a+b);//求和  7
		//数值类型的数据和字符进行求和时,先把字符转成对应的编码值再进行求和
		System.out.println(a+'a');//求和 100
		//字符串常量可以和任意数据进行拼接
		System.out.println(a+"a"); 3a
		System.out.println(a+"a"+'a'); //3aa
		
		//操作-
		//小数没有精确运算
		double d=2.1-1.9;
		System.out.println(d); // 0.20000000000000018不是精确结果
		
		//操作*
		int a=6;
		int b=2;
		System.out.println(a/0);//ArithmeticException--算数异常
		//java支持小数除0,不支持整数除0
		System.out.println(a*1.0/0);//Infinity--正无穷大
		System.out.println(-a*1.0/0);//-Infinity--负无穷大
		System.out.println(0.0/0);//NaN--Not a Number 不是一个数
		//当参与操作的都是整型数据结果依然是整型数据
		System.out.println(2/4);//0 
		//当参与操作出现小数结果就是小数
		System.out.println(2*1.0/4);//0.5
		
		//操作%
		int a=3;
		int b=4;
		//%左边数据的正负决定了结果的正负
		System.out.println(a%b);
		System.out.println(-a%b);
		System.out.println(a%-b);
		System.out.println(-a%-b);

		操作++ --
		int a=3;
		int b=--a;*///参与运算
		System.out.println(a++); //3先赋值再自加
		System.out.println(++a);  //4先自加再赋值
		//3++ +(--4)+(3--)+(++2)
		//a=3 4 3 2 3
		//左边变量值改变后会影响右边变量的值
		int c=(a++)+(--a)+(a--)+(++a);
		System.out.println(a);  //4
		System.out.println(b);

		//byte,short,char做++、--时底层会默认添加强制类型转换
		byte b1=127;
		b1++;
		short s=-32786;
		s--;
		System.out.println(s);//-128
		
	}
}

二.赋值运算符:

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

class FuZhi{
	public static void main(String[] args) {
		//定义变量
		int a=3;
		int b=4;
		a+=b;//a=a+b;
		System.out.println(a);//7
		
		byte b=2;
		//b=b+3;b+3为int类型
		b+=3;//b=b+3  
		System.out.println(b);

		int a=1,b=2,c=3;//支持此种定义形式
		int a=b=c=3;//不支持连等定义
		//支持连等赋值
		int a=3;//展开从右往左计算、
		//b=3+=3-=3*5=15
		//b=3+=3-=15  3=3-15=-12
		//b=3+=-12 3=3-12=-9
		//int b=a+=a-=a*=5;

		//右边变量的值改变了不会影响左边已经编译好的值
		//b=3+=3-=3*=3++
		int b=a+=a-=a*=a++;
		System.out.println(a);//-9
		System.out.println(b);//-9	
	}
}

三.关系运算符:

关系(比较)运算符:结果值一定是布尔值
== 、!=、 >、 <、 >=、 <=
a>b>c a>b b>c

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

四.逻辑运算符:

逻辑运算符:&(逻辑与)、|(逻辑或)、^(逻辑异或)、!(逻辑非)、&&(逻辑双与)、||(逻辑双或)

总结:
	1.&:遇见false则false
	2.|:遇见true则true
	3.^:相同则false,不同则true(吸铁石 同性相斥,异性相吸)
	4.!:结果值取反(当出现偶数个时结果不变,奇数个取反)
	5.&&:当&&与&运算规律一致,但是当&&左边出现false时,右边默认不执行--短路效果
	6.||:当||与|运算规律一致,但是当||左边出现true时,右边默认不执行--短路效果
	&& 和 || 常用
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));//flase&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));//flase|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));//flase^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("----------------");
		System.out.println((b>c));//flase
		System.out.println(!(b>c));//true
		System.out.println(!(!(b>c)));//false
		System.out.println(!(!(!(b>c))));//true
		System.out.println("----------------");
		

		//操作与&& 和逻辑&的运算规律一致
		System.out.println((a>b)&&(b>c));//false&&false  //false
		System.out.println((a>b)&&(b<c));//flase&&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
		System.out.println(a); //2
		System.out.println(c);  //2*/

		//||出现在&&左边且||出现短路(true),就会把它后面的内容及&&都短路掉
		System.out.println((true)||(a++==b)&&(b>c--));//true
		System.out.println(a); //1
		System.out.println(c);  //3
	}
}

五.位运算符:

位运算符1

数据转成二进制补码形式

&(按位与)、|(按位或)、^(按位异或)、~(按位取反)

class WeiSuanDemo1{
	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 3
//操作~
//按所有位取反
00000000 00000000 00000000 00000010
--------------------------------------------------------
11111111 11111111 11111111 11111101 负数 补码
11111111 11111111 11111111 11111100 反码
10000000 00000000 00000000 00000011 原码 -3
*/

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

class WeiSuanDemo2{
	public static void main(String[] args) {
		int a=12;
		//操作>>
		System.out.println(a>>2);//3
		//操作<<
		System.out.println(a<<2);//48
		//操作>>>
		System.out.println(a>>>2);//3
			
	}
}

/*
00000000 00000000 00000000 00001100 int 12补码
//操作>> 2
[00]000000 00000000 00000000 00000011(00)
---------------------------------------------
00000000 00000000 00000000 00000011 3:1+2
//操作<< 2
(00)000000 00000000 00000000 00001100[00]
---------------------------------------------
00000000 00000000 00000000 00110000 48:16+32
//操作>>> 2
[00]000000 00000000 00000000 00000011(00)
---------------------------------------------
00000000 00000000 00000000 00000011 3:1+2
*/

六.三目(元)运算符:

~a(一元)
a+b(二元)
三目(元)运算符
格式:布尔表达式?表达式值1:表达式值2;
执行流程:先计算出布尔表达式的值,如果是true返回表达式值1,如果是false返回表达式值2.

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

		//求三个整数最大值
		int a=1;
		int b=2;
		int c=3;
		//三目嵌套
		System.out.println(a>b?(a>c?a:c):(b>c?b:c));//3
		
	}
}