一、运算符
-
算术运算符
+,-,*,/,%(质数,奇偶),++,--(问题最大)
++ 一目运算符
public static void main(String[] args) {
int num = 1;
// 在JVM中先取num的值,再对值进行运算
// 在效果上相当于两个语句,第一个是直接打印num
// 第二个是对num进行加1
System.out.println(num++);
System.out.println(num);
}public static void main(String[] args) {
int m = 1;
int n = 1;
int p = m++ + m + n++ + n;
System.out.println(p);
p = m++ + m++ + n++ + n++;
System.out.println(p);
}自增和自减的一个重要的现象:当符号在变量前时,JVM先看到的是要做的事,即加或减,然后找变量看是对哪个变量进行操作,结果是对变量操作完成
-
关系运算符
== ,!=,>,<,>=,<=
-
位运算符
首先要知道数字在计算机中的存储形式,转换为二进制,正数(原码,补码),负数以补码形式存在
对于一个负数,进行位运算,首先把数字换成它的原码,然后再反码,再补码,对补码进行位运算,然后,把结果反码再原码,再十进制
& | ^ ~
int m = 1;
int n = 1;
// 0000 0001
// 0000 0001
// ---------
// 0000 0001
System.out.println(m&n);
// & | ^ ~
System.out.println(~m);byte b1 = -3;
byte b2 = 3;
// b1:1000 0011; 1111 1100 1111 1101
// b2: 0000 0011
// 0000 0001
System.out.println(b1&b2);
byte b3 = -3;
System.out.println(b1 & b3);// 补码:1111 1101 | 1111 1100 | 原码1000 0011
// b1:1000 0011 | 1111 1100 | 1111 1101
// b2:1000 0100 | 1111 1011 | 1111 1100
// ------------------------------------
// 1111 1101
// 补码:1111 1101 | 反码:1111 1100 | 原码:1000 0011 十进制:-3byte b = 2 << 3;
System.out.println(b);
System.out.println(4 << 2);
System.out.println(-4 << 3);
// -4: 1000 0100 | 1111 1011 | 1111 1100.
//1110 0000. | 1101 1111 | 1010 0000右移和左移相反,相当于对原数进行2的n次方的除法
16 >> 2 = 16 / 4 ;
System.out.println(16 >> 2);
System.out.println(-16>> 2);
System.out.println(-16>>3);无符号右移>>>
对于正数的无符号右移和普通右移一样
byte b = -8;
// 把-8换成int型的补码
// b: 1000 1000 | 1111 0111 | 1111 1000
// 1111 1111 1111 1111 1111 1111 1111 1000
// 0011 1111 1111 1111 1111 1111 1111 1110
System.out.println(-8>>>2);