运算符
字符串拼接
System.out.println("hell" + ‘o‘); // hello
System.out.println(‘a‘ + 1 + "hello"); // 98hello
除法运算
丢弃小数,保留小数部分
int a = 3;
int b = 2;
int c = a / b;
System.out.println(c); // 1
提高精度
int a = 3;
int b = 2;
double c = 1.0 * a / b;
System.out.println(c); // 1.5
++和--运算符
++a
:先运算再赋值
a++
:先赋值再运算
int a = 1;
int b = 2;
int c;
c = a++;
System.out.println(c); // 1
c = ++b;
System.out.println(c); // 3
再来看一个例子
int a = 4;
int b;
b = (a++) + (++a) + (a * 10);
System.out.println(b); // 70
关系运算符
结果为true or false
int a = 2;
int b = 3;
boolean c = a > b;
System.out.println(c); // false
逻辑运算符
与:&
或:|
非:!
int a = 2;
int b = 3;
boolean c = a > b & a++ == 0;
System.out.println(c); // false
System.out.println(a); // 3
短路与:&&
短路非:||
示例代码如下:
int a = 2;
int b = 3;
boolean c = a > b && a++ == 0;
System.out.println(c); // false
System.out.println(a); // 2
异或运算
相同为false
不同为true
boolean c = true ^ false;
System.out.println(c);
位运算符
按位运算
左移运算:左移1位相当于乘以2(未超出表示范围)
int c = 3 << 2;
// 0000 0011 > 0000 1100
System.out.println(c); // 12
带符号右移>>
:右移1位相当于除以2(高位补符号位)
int c = -2 >> 1;
// -2的原码: 1000 0010
// 反码: 1111 1101
// 补码: 1111 1110
// 带符号右移1位(高位补符号位)
// 1111 1110 >> 1111 1111
// 求原码
// 补码: 1111 1111
// 反码: 1000 0000
// 原码: 1000 0001
System.out.println(c); // -1
无符号右移>>>
(高位补0)
// -2在计算中的存储
// 1111 1110
// 右移
// 0111 1111
int n1 = -2;
n1 = n1 >>> 1;
System.out.println(n1);
按位运算符
int n1 = 1;
int n2 = 2;
// & 与
// 001
// 010
// 000
// | 或
// 001
// 010
// 011
// ^ 异或(相同为0,不同为1)
// 性质1:a ^ a = 0
// 性质2:a ^ 0 = a
// 001
// 010
// 011
// ~ (按位取反)
// 001
// 110
System.out.println(n1 & n2);
System.out.println(n1 | n2);
System.out.println(n1 ^ n2);
System.out.println(~n1); // -2
原文:https://www.cnblogs.com/gmbjzg/p/14609798.html