一、 算数运算符:
1.1基本四则运算符: + - * /
int a = 1;
int b = 2;
System.out.println(a + b); //输出3
System.out.println(a - b); //输出-1
System.out.println(a * b); //输出2
System.out.println(a / b); //输出0,因为在计算时是以double型进行计算,最后转为int型时造成数据丢失(b不能等于0)
System.out.println((double)a / b); //输出0.5,将a强制转换为double型,b隐式转换为double型,最后结果也为double型
1.2 取余运算符: % 其不仅能对int型数据求模,还能对double型数据求模.
System.out.println(11.5 % 2.0); //输出为1.5
1.3 增量赋值运算符: +=,-=,*=,/=,%=
int a = 10;
a += 1; //等价于a = a + 1
System.out.println(a); //输出11
1.4自增/自减运算符: ++/–
int a = 10;
int b = ++a; //等价于a=a+1,b=a;
System.out.println(b); //输出11,即b=11,a=11
int c =a++; //等价于c=a, a=a+1
System.out.println(c); //输出11,c=11,a=12
二、关系运算符:
主要有6个:
== != < > <= >=
int a = 1;
int b = 2;
System.out.println(a < b); //输出为true
多用于比较运算,其表达式返回值都是boolean类型
三、逻辑运算符:
逻辑运算符主要有3个:
&& || !
需要注意的是逻辑运算符的操作数和返回值都是boolean类型
a) && 表示逻辑与
使用规则为:若两个操作数都为true,结果为true,否则为false.
int a = 1;
int b = 2;
System.out.println(a < b && a != 0); //输出为true
b) ||表示逻辑或
使用规则为:若两个操作数都为false,结果为false,否则为true.
int a = 1;
int b = 2;
System.out,println(a > b && a == 2); //输出为false
c) !表示逻辑非
使用规则为:若操作数为true,结果为false;若操作数为false,结果为true.
int a = 1;
int b = 2;
System.out.println(a < b); //输出为true
System.out.println(! a < b); //输出为false
注意事项:
&& 和 ||遵守短路求值的规则.
System.out.println(10 > 15 && 10 / 0 == 0); //输出false,不会抛出异常,10 / 0 == 0并未执行到
System.out.println(10 < 15 || 10 / 0 == 0); //输出为true,不会抛出异常,10 / 0 == 0并未执行到
即:
1)对于&&来说,若其左侧的表达式为false,则无需判定其右侧表达式,表达式的总体的值为false;
2)对于&&来说,若其左侧的表达式为true,则无需判定其右侧表达式,表达式的总体的值为true;
3)按位与(&)和按位或(|)的两侧操作数为boolean类型时,也表示操作运算符,但都不支持短路求值.
四、位运算符:
Java对数据的操作的最小单位是二进制位,而位操作表示按二进制位运算.
位运算符主要有4个: & | ^ ~
1)按位与(&)的规则:若两个数的二进制位都是1,结果为1,其他情况都为0.
int a = 10; //10用二进制数表示为01010
int b = 20; //20用二进制数表示为10100
System.out.println(a & b); //结果用二进制数表示为00000,即结果为0
2)按位或(|)的规则:若两个数的二进制位都是0,结果为0,其他情况都为1.
int a = 10; //10用二进制数表示为01010
int b = 20; //20用二进制数表示为10100
System.out.println(a | b); //结果用二进制数表示为11110,即结果为30
3)按位异或(^)的规则:若两个数的二进制位相同(同为1,或同为0),结果为0,其他请况为1.
int a = 10; //10用二进制数表示为01010
int b = 20; //20用二进制数表示为10100
System.out.println(a ^ b); //结果用二进制数表示为11110,即结果为30
4)按位取反(~)的规则:若对一个数取反,则其二进制位若为1,则变为0;若为0,则变为1.
int a = 10; //10用二进制数表示为01010
System.out.println(~a); //结果用二进制数表示为10101,即结果为负数,对其除符号位外的各位取反加1得其原码为-11
五、移位运算:
在java中移位运算符有3个:<< >> >>>
- 左移(<<):最左则二进制位舍弃,最右侧补0.
int a = 10; //10用二进制数表示为01010
//20用二进制数表示为10100
System.out.println(a << 1); //输出a左移1位的结果,为20.
/*结论:左移1位等价于原数乘以2*/
2)右移(>>):最右侧二进制位舍弃,最左侧补符号位(即正数补0,负数补1).
int a = 10; //10用二进制数表示为01010
System.out.println(a >> 1); //输出a右移1位的结果,即00101,转化为十进制数表示为5
int b = -8; //-8用二进制数表示为11000
Syetem.out.println(a >> 1); //输出右移1位的结果,即11100,转化为十进制数表示为-4
/*结论:右移1位等价于原数除以2*/
3)无符号右移(>>>):最右则二进制位舍弃,最左侧补0.
int a = 0xffffffff; //以0x为前缀的位十六进制数字,0xffffffff用十进制数表示为-1
System.out.printf("%x\n",a >>> 1); //结果按十六进制输出为7fffffff,转化为十进制数表示为2147483647
六、条件运算符:
条件运算符只有一个,也是唯一一个三目运算符: 表达式1? 表达式2 :表达式3
其使用规则为:当表达式1的值为true时,整个表达式的值为表达式2的值;若表达式1的值为false时,整个表达式的值为表达式3的值.
int a = 10;
int b = 20;
int max = a > b ? a : b; //若a大于b,max等于a;若a不大于b
System.out.println(max); //输出为20