目录
自增与自减运算符(num++,num--,++num,--num)
运算符类型 | 符号 |
算数运算符 | ' + ', ' - ', ' * ', ' / ' |
取模运算符 | ' % ' |
自增自减运算 | num++, num--, --num, ++num |
逻辑运算符 | &&, ||, ! |
运算符 | &, |, ^ |
<< >>和>>> 位移 | <<, >>, >>> |
比较运算符 | <, >, <=, >=, ==, != |
算数运算符(+, -, *, /)
java中四种运算符 +, -, *, / 分别代表加减乘除
public static void main(String[] args) {
int a = 10;
int b = 3;
System.out.println(a + b);//13
System.out.println(a - b);//7
System.out.println(a * b);//30
System.out.println(a / b);//3
}
注意事项:
+ - 时需要注意的是不要超过该类型的最大值或最小值,如果在最大值上继续加则会输出最小值,同理在最小值上继续减则会输出最大值
public static void main(String[] args) {
int a = Integer.MAX_VALUE;//int最大值
int b = Integer.MIN_VALUE;//int最小值
System.out.println(a);//2147483647
System.out.println(a+1);//-2147483648
System.out.println(b);//-2147483648
System.out.println(b-1);//2147483647
}
在进行除法(/)的时候如果是两个不能整除的int,则会忽略小数点返回一个int类型的结果, 分母不能为0! 当一浮点类型除0时会返回一个infinity,当使用整型除0时会直接报错
public static void main(String[] args) {
System.out.println(10/3);//3
System.out.println(10.0/3);//3.333循环
System.out.println((float)10/3);//3.333循环
System.out.println((10/3)*1.0);//3.0
System.out.println(10.0/0);//Infinity(无穷)
System.out.println(10/0);//直接报错
}
取模/取余运算符(mod)
取模也叫取余, 返回除法后两个数的余数,如果两个数可以整除则返回0,与上面除法同理如果一个整型和0取模会直接报错,浮点型和0取模时会返回NaN(Not a Number).
public static void main(String[] args) {
//无法被整除的情况
System.out.println(10%3);//1
System.out.println(-10%3);//-1
System.out.println(10%-3);//1
System.out.println(-10%-3);//-1
System.out.println(10.0%3);//1.0
System.out.println(10.0%3.1);//0.69999
System.out.println(10.0%0);//NaN
//可以被整除时
System.out.println(10%2);//0
}
这里是一个用取模来判断输入的数是奇数还是偶数的例子
public static void main(String[] args) {
//输入
Scanner scan = new Scanner(System.in);
int num = scan.nextInt();
//如果能被2整除则为偶数
if(num % 2 == 0){
System.out.println("偶数");
}else{
System.out.println("奇数");
}
}
自增与自减运算符(num++,num--,++num,--num)
num++ 和 ++num都代表在num的基础上加1但是num++是在该次运行直接后再加1,++num是读取num时就已经加过1了.如以下代码:
public static void main(String[] args) {
int num = 10;
int test = 20;
//num++在读取时并不会加1
System.out.println(num++);//10
//在这里num = 11
//当使用++num时读取num时1已经加上了
//所以这里的运算是 11+1
System.out.println(++num);//12
//此时num = 12
System.out.println(num++ + ++num);//12+14 = 26
//同理
System.out.println(--test);//19
System.out.println(test--);//19
System.out.println(test);//18
}
逻辑运算符(&&, ||, !)
&& (逻辑与) 代表当两个条件都为真时返回真,任意一个为假则返回假
|| (逻辑或) 当两个条件有一个及以上为真时返回真,只有两个条件都为假时返回假
! (逻辑非) 把true变成false,false变成true
public static void main(String[] args) {
int num1 = 10;
int num2 = 20;
//与 &&
System.out.println((num1 > num2 && num1 != 0));//false && true 返回false
System.out.println(num1 != 0 && num2 != 0);// true && true 返回 true
//或 ||
System.out.println((num1 > num2 || num1 != 0));//false || true 返回true
System.out.println(num1 == 0 || num2 == 0);//false || false 返回false
//非 !
System.out.println(!true);//return false
System.out.println(!false);//return true
}
位运算(&, |, ^)
位运算是在电脑储存的二进制上进行运算,二进制只有0和1
运算名 | 符号 | 描述 | 例子 |
与 | & | 两个都是1时返回1,否则返回0 | 00110 & 00100 = 00100 |
或 | | | 当有一个或以上是1时就返回1,两个都为0则返回0 | 00110 | 00100 = 00110 |
异或 | ^ | 当对位不同时返回1,其他情况返回0.所以A^A时返回0 | 00110 ^ 00100 = 00010 |
public static void main(String[] args) {
int a = 14;//1110 二进制
int b = 10;//1010 二进制
// 0000 1110(14)
//&0000 1010(10)
// 0000 1010 = 10
System.out.println(a & b);//10
// 0000 1110(14)
//|0000 1010(10)
// 0000 1110 = 14
System.out.println(a | b);//14
// 0000 1110(14)
//^0000 1010(10)
// 0000 0100 = 4
System.out.println(a ^ b);//4
System.out.println(a ^ 14);//0
}
一个计算二进制有几个1的算法:
比如0110,里有2个1,所以返回2.
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int cout = 0;
while(n != 0){
n = n & (n-1);
//计算&的次数
cout++;
}
System.out.println(cout);
}
<< >>和>>>
<<操作二进制左移,并在最右边补0,>>操作二进制右移
比如14的二进制是 0000 1110(14)
14<<3代表14的二进制向左移动三个变成 0111 0000(112)
右移同理
要注意的是位移不可以是负数
>>>是无符号右移运算符,当一个数是负数是不得使用,他会把符号位的1读入,没有<<<
public static void main(String[] args) {
int a = 14;//0000 1110 二进制
// 0000 1110(14)
//>>>3 0000 0001(1)
System.out.println(a>>3);//1
System.out.println(-a>>1);//-7
System.out.println(a>>>3);//1
System.out.println(-a>>>3);//536870910
//int类型储存为4字节 储存32位
//所以左移和右移大于等31位都是非法的
System.out.println(a<<32);//错误示范
//也不能为负数
System.out.println(a>>-2);//错误示范
}
比较运算符(<, >, <=, >=, ==, !=)
运算名 | 符号 | 描述 |
小于 | < | 判断左边的数是否小于右边 |
大于 | > | 判断左边的数是否大于右边 |
小于等于 | <= | 判断左边的数是否小于等于右边(等号和小于号位置不能互换) |
大于等于 | >= | 判断左边的数是否大于等于右边 |
等于 | == | 判断等号两边是否相等,一个 = 为赋值, ==为判断 |
不等于 | != | 左边不等于右边时,则返回真 |
//比较运算符的结果为bool类型
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println(a == b);//false
System.out.println(a != b);//true
System.out.println(a < b);//true
System.out.println(a > b);//false
System.out.println(a <= b);//true
System.out.println(a >= b);//false
System.out.println(a => b);//错误示范
}