请问这个java计算字符串表达式运算结果,谢谢

运算符1、算数运算符算数运算符+ - * / % ++ –++、–使用方式:单独使用 参与运算1、当++、–出现在操作数的后面时,先传值再自加1/自减12、当++、–出现在操作数的前面时,先自加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则false2、|---->遇见true则true3、^---->同名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,则返回表达式值2public 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);
}
}

我要回帖

更多关于 java计算字符串表达式 的文章