Java运算符
计算机原码、反码、补码定义
-
原码表示法规定:用符号位和数值表示带符号数,正数的符号位用“0”表示,负数的符号位用“1”表示,数值部分用二进制形式表示。
-
反码表示法规定:正数的反码与原码相同,负数的反码为对该数的原码除符号位外各位取反。
-
补码表示法规定:正数的补码与原码相同,负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1。
基本运算符
- 算术运算符:+,-,*,/,%,++,–
二元运算符
int a = 10;
int b = 20;
int c = 10;
int d = 10;
int e = 21;
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println(a/b);//int类型相除还是int,因此舍去小数点后数值,为输出正确数值需要将其中一个转换为浮点数。
System.out.println((double) a/b);
System.out.println(e%a);//取余,也称模运算```
long a = 324234523L;
int b = 123;
short c = 10;
byte d = 7;
double e = 10.2;
System.out.println(a+b+c+d);
System.out.println(b+c+d);
System.out.println(c+d);
System.out.println(a+b+c+d+e);
多个类型进行运算,有一个数据类型为long,结果也为long,如果没有,那结果均为int,无论int是否参与。也即是混合数据类型参与计算,自动升格为包含的类型中的最高类型,若不足int,则补足至int。
一元运算符++和–要注意运算顺序,放在变量前先自增,再赋值,放在变量后,先赋值,再自增。
//++ -- 自增 自减 属于一元运算符,自己便可以参与运算
int q = 3;
int w = q++;//执行完这行代码后,先给w赋值,然后q自增。
int r = ++q;//执行完这行代码前,q先自增,再给r赋值。
System.out.println(q);
System.out.println(r);
System.out.println(w);
//所以结果为q=5,r=5,w=3。
- 赋值运算符:=
- 关系运算符:<,>,<=,>=,==,!=,instanceof
//关系运算符返回的结果,true或者false
int a = 10;
int b = 20;
System.out.println(a>b);
System.out.println(a<b);
System.out.println(a==b);
System.out.println(a!=b);
- 幂运算在Java中无法使用,比如23,但是可以使用数学工具,如
double pow = Math.pow(2, 3);
System.out.println(pow);
-
ctrl + D ,复制当前行到下一行。
-
逻辑运算符:,&&,||,!。
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)));//逻辑非运算:结果为真变假。
//短路运算,与运算中开头变量为假,后边便不需要执行,或运算中开头为真,那后面也不需要执行,如b&&a,a||b。
int c = 5;
boolean d = (c<4)&&(c++<4);
System.out.println( c);
System.out.println(d);//结果c =5,后面的没有执行。
- 位运算符:&,|,^,~,>>,<<,>>>
/*
A = 0011 1100
B = 0000 1101
A&B =0000 1100 对位比较,两个为1才输出1,否则为0。
A|B =0011 1101 有一个1就输出1。
A^B =0011 0001 相同为0,不同为1.
~B = 1111 0010 取反。
2*8最快运算方法,使用位运算。
<< 左移 对象的2进制数后面加位移数字的0 如 1100 1011<<2 == 1100 1011 00
>> 右移 对象的2进制数右边去掉位移数字的位。1100 1011>>2 == 1100 10
*/
System.out.println(2<<3);//意为2的2进制向左移3位,即0000 0010变为0001 0000
-
2进制最左边的数字代表正负,0为正,1为负。
-
正数>>,等于其2进制数去掉位移数字的位数;负数>>,等于去掉位移位数的同时在其前面加相应位数的1。
-
正数<<,相当于直接在其2进制数最后加位移数字的0;负数<<也是如此。
-
对于正数来说,>>>同>>一样为右移,对于负数而言,意味着直接去掉位数的同时,前面不补1,也即是默认变为了0,变成了正数。
int a = 0b11000110;
int b= 0b00110001;
System.out.println(b);
System.out.println(a);
System.out.println(a>>3);
System.out.println(Integer.toBinaryString(a>>3));
System.out.println(Integer.toBinaryString(-a));
int c = 0b11111111111111111111111100111010;
System.out.println(c);
System.out.println(c>>2);
System.out.println(Integer.toBinaryString(c>>2));
System.out.println(c<<2);
System.out.println(Integer.toBinaryString(c<<2));
System.out.println(c>>>2);
System.out.println(Integer.toBinaryString(c>>>2));
System.out.println(Integer.toBinaryString(1073741774));
-
条件运算符:?,:
三元运算符
public static void main(String[] args) {
// x? y : z
//如果x==true,则结果为y,否则为z
int score = 80;
String type = score < 60 ? "不及格":"及格";
System.out.println(type);
- 拓展赋值运算符:+=,-=,*=,/=
int a= 10;
int b = 20;
int c = 30;
int d = 40;
a+=b;//等价于a=a+b
System.out.println(a);
a-=b;//a=a-b
System.out.println(a);
System.out.println("==========================================");
//字符串连接符 +
System.out.println(a+b);
System.out.println(""+a+b);//操作对象中最前面存在String类型等字符串,会自动转换为字符串运算。
// 此处输出1020
System.out.println(a+b+"");//如果操作对象中的字符串在末尾,那么仍旧进行计算。
//此处输出 30
System.out.println(a+""+b);//如果操作对象中的字符串在中间,那么会转换为字符串进行运算。
//此处输出 1020
System.out.println(a+b+""+c+d);//如果操作对象不止两个,字符串前方有数字运算,那么字符串前继续运算,后面则转化为字符串运算。
//此处输出303040。
在使用字符串连接符进行运算时,如果操作对象中存在字符串,字符串在首位时,后面全部转化为字符串运算,而字符串前面如果不止一个对象,那么先进行数学运算再转化为字符串参与运算。如 a=10,b=20,c=30,d=40,
a+b+“”+c+d=303040。
运算符优先级
结论:多加括号。
全部逻辑运算符实例及输出结果
package operator;
public class Test7 {
//三元运算符
public static void main(String[] args) {
// x? y : z
//如果x==true,则结果为y,否则为z
int score = 80;
String type = score < 60 ? "不及格":"及格";
System.out.println(type);
int a= 10;
int b= 20;
int c = 22;
int d = a++;
System.out.println(a);
System.out.println(d);
int e = ++a;
System.out.println(a);
System.out.println(e);
System.out.println("==============================================");
int f = a--;
System.out.println(a);
System.out.println(f);
int g = --a;
System.out.println(a);
System.out.println(g);
System.out.println("===========================================================");
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println(a/(double)b);
System.out.println(a%b);
System.out.println(b%a);
System.out.println(c%a);
System.out.println("=============================================================");
System.out.println(a>b);
System.out.println(a<b);
System.out.println(a>=b);
System.out.println(a<=b);
System.out.println(a==b);
System.out.println(a!=b);
System.out.println("=============================================================");
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)));
System.out.println("===============================================================");
int C = 0b01001100;
int D = 0b10110100;
int E = 0b11111111111111111111111100111010;
System.out.println(C);
System.out.println(D);
System.out.println(E);
System.out.println(C&D);
System.out.println(C|D);
System.out.println(C^D);
System.out.println(~C);
System.out.println(C<<2);
System.out.println(C>>2);
System.out.println(C>>>2);
System.out.println(E>>2);
System.out.println(E<<2);
System.out.println(E>>>2);
System.out.println("==========================================================");
int F = 15;
String fenshu = F>20? "yes":"no";
System.out.println(fenshu);
a+=b;
System.out.println(a);
a-=b;
System.out.println(a);
a*=b;
System.out.println(a);
a/=b;
System.out.println(a);
}
}
输出结果:
及格
11
10
12
12
==============================================
11
12
10
10
===========================================================
30
-10
200
0.5
10
0
2
=============================================================
false
true
false
true
false
true
=============================================================
A&&B:false
A||B:true
!(A&&B):true
===============================================================
76
180
-198
4
252
248
-77
304
19
19
-50
-792
1073741774
==========================================================
no
30
10
200
10