算术运算符
加法运算:+
减法运算:-
乘法运算:*
除法运算:/
取模运算:%
package cn.ryjiaoyu.www.nuit2.operators;
import org.junit.Test;
/**
* 算术运算符
*/
public class Demo {
/**
* 除法运算:
* 在数学运算中,0作除数时没有任何意义
* 但在Java程序中,对于整型数据的运算,它会出现 异常
* 对于浮点型数据的运算,它会得到一个无穷大值或NaN(未定义或不可表示的值)
*/
@Test
public void m1() {
System.out.println("123.0/0=" + 123.0 / 0);
System.out.println("123/0=" + 123 / 0);
}
/**
* 取模运算:即求余运算
* 其操作数可以是浮点数,计算结果也将是浮点数
*/
@Test
public void m2() {
System.out.println("123.5 mod 4=" + 123.5 % 4);
System.out.println("123 mod 4=" + 123 % 4);
}
}
注意:取模运算也会执行除法操作,因此对于整型数据来说,也不能使用0作为取模运算的中“除数”。
位运算符
位运算符以二进制为单位进行运算,其操作数与运算结果都是整型值,适用的数据类型有byte,short,char,int,long
运算符 | 名称 | 示例 | 说明 |
---|---|---|---|
& | 位与 | x&y | 把x与y按位求与 |
| | 位或 | x|y | 把x与y按位求或 |
~ | 位非 | ~x | 把x按位求非 |
^ | 位异或 | x^y | 把x与y按位求异或 |
>> | 右移 | x>>y | 把x的各位右移y位 |
<< | 左移 | x<<y | 把x的各位左移y位 |
>>> | 0填充的右移 | x>>>y | 把x的各位右移y位,左边添0 |
package cn.ryjiaoyu.www.nuit2.operators;
import org.junit.Test;
/**
* 位运算符
*/
public class Demo01 {
/**
* &(位于)运算符
* 将整数数据化为二进制数据,再按位求与()
* 当两个二进制数的位数不同时,从最后位开始求与,差的添0
* 十进制转二进制:Integer.toBinaryString(n)
*/
@Test
public void m1(){
int x=65; //x化为二进制为:1000001
int y=33; //y化为二进制为: 100001
int z=x&y; //z为:1
System.out.println(z);
}
/**
* ^(位异或)运算:
* 按位求异或,0与1求异或为1,其余皆为0;
*/
@Test
public void m2(){
int x=54; //x的二进制为:110110
int y=30; //y的二进制为: 11110
int z=x^y; //z的二进制为:101000
System.out.println(z);
}
/**
* >>(右移)运算:
* x>>y:把x的各位右移y位
* 当x为正整数时,x的二进制数右移y位,如方法m3();
* 当x位负整数时,如方法m4();
*/
@Test
public void m3(){
int x=70; //x的二进制为:1000110
int y=2;
int z=x>>y; //z的二进制为:0010001
System.out.println(z);
}
@Test
public void m4(){
/**
* x=-70
* 其原码为:11000110(第一位为符号位,表示为负数,符号位一直不变)
* 取其反码:10111001
* 取其补码:10111010(反码的最后位加1,满二进一)
* 补码右移两位,左边添两个1:11101110
* 取反码:10010001
* 取原码:10010010(上一步的反码最后位加一,满二进一)
* 最终答案为:-18
*/
int x=-70; //x的二进制为:11000110
int y=2;
int z=x>>y; //z的二进制为:10010010
System.out.println(z);
}
}
注意:0填充的右移(>>>)是不论被移动属是正数还是负数,左边移进的部分一律补0。
关系运算符
运算符 | 名称 | 示例 | 功能 |
---|---|---|---|
< | 小于 | a<b | a小于b时返回true,否则返回false |
<= | 小于等于 | a<=b | a小于等于b时返回true,否则返回false |
> | 大于 | a>b | a大于b时返回true,否则返回false |
>= | 大于等于 | a>=b | a大于等于b时返回true,否则返回false |
== | 等于 | a==b | a等于b时返回true,否则返回false |
!= | 不等于 | a!=b | a不等于b时返回true,否则返回false |
逻辑运算符
符号 | 名称 | 功能说明 |
---|---|---|
! | 非 | 只操作一个数据,对数据取反 |
& | 与 | 两个条件同时为true才为true,否则为false |
| | 或 | 两个条件只要有一个为true就为true,否则为false |
^ | 异或 | 两个条件真值不同,则异或结果为true,否则为false |
&& | 短路与 | 同&,两个条件同时为true才为true,否则为false |
|| | 短路或 | 两个条件只要有一个为true就为true,否则为false |
短路与和短路或是按照“短路”的方式进行求值的,即当第一个表达式可以判断出整个表达式的值时,后面的就不用运算了。
比如:a&&b,若表达式a的值为false,那么表达式b就不用运算了;a||b,若表达式a的值为true,那么表达式b也就不用计算了。
三目运算符
三目运算符也称条件运算符,用法如下:
condition?a:b
其中条件condition是一个布尔表达式,若condition为true,那么表达式的值为a,否则为b。
package cn.ryjiaoyu.www.nuit2.operators;
public class Demo02 {
/**
* 三目运算符:
* 布尔表达式?a:b
*/
public static void main(String[] args) {
int a=10,b=a;
System.out.println(a!=b?3:8);
}
}