关于运算符
运算符的分类:
- 1、赋值运算符 =
- 2、算术运算符 + - * / %(模) ++ –
- 3、复合运算符 += -= *= /= %=
- 4、关系运算符 > >= < <= == !=
- 5、逻辑运算符 && || !
- 6、位运算符 & | ~ ^ << >>
- 7、三目运算符 ?
// ++ 自增运算符
int num = 10;
// num++;//等价于num = num + 1;
// ++num;//等价于num = num + 1;
int num2 = 10;
int x = num++;//num = num + 1;
//int x = num++;
//等价于 int x = num;
// num = num + 1;
int y = ++num2;//num2 = num2 + 1;
//int y = ++num2;
//等价于 num2 = num2 + 1;
//int y = num2;
//++在变量前面,先增1,再使用便令。
//++在变量后面,先使用变量,在增1
关系运算符 > >= < <= == !=
//关系运算符的运算结果一定是一个boolean
逻辑运算符 && || !
//&& 逻辑与 表示并且,用来连接2个表达式。
//&&两侧的表达式都为真的时候,结果才为真。
//只要有一个表达式是假,结构就是假。
//注意事项:一旦发现&&前面的表达式为假了
//就不再计算后面的表达式了
//这个现象称为短路现象。
//|| 逻辑或 表示或者。
//||左侧或者右侧有一个为true结果就是true。
//只有在2者都是false的时候才为false。
//如果 || 左侧的表达式为true,就不再计算||右侧的表达式了
6、位运算符 & | ~ ^ << >>
机器码 最高位是符号位 0表示整数 1表示负数
//真值:真正的值,带正负号。是10进制数。
//原码(机器码)
//反码:正数的反码与原码相同,负数的反码:符号位不变,其他位取反。
//补码:正数的补码与原码相同,负数的补码:反码+1
//在内存里,整数都是按补码存放的。
//& 按位与。 &左右两侧是2个整数。
//计算规则,先把2个数转化位二进制(补码)。
//再按位与。相同位置的数都是1结果才是1,有一个是0,结果就是0
//| 按位或。 |左右两侧是2个整数。
//计算规则,先把2个数转化位二进制(补码)。
//再按位或。相同位置的数都是0结果才是0,有一个是1,结果就是1
//~按位取反。以前是0变成1,以前是1变成0.
//也是先找补码,对补码取反。
//~8 0000 0000 0000 0000 0000 0000 0000 1000
// 0000 0000 0000 0000 0000 0000 0000 1000(补)
//~ 1111 1111 1111 1111 1111 1111 1111 0111(补)
// 1111 1111 1111 1111 1111 1111 1111 0110(反)
// 1000 0000 0000 0000 0000 0000 0000 1001(原)
// -9
System.out.println(~8);
//~-5 1000 0000 0000 0000 0000 0000 0000 0101
// 1111 1111 1111 1111 1111 1111 1111 1011(补)
//~ 0000 0000 0000 0000 0000 0000 0000 0100(补)
// 0000 0000 0000 0000 0000 0000 0000 0100(反)
// 4
System.out.println(~-5);
// 取非的快速公式:~A = -(A+1);
^ 左右2侧是2个整数。也是先转换为二进制(补码)。
// 相同位置的数,相同为0,不同为1.
数 << n位。<< 左侧是你要移动的数,右侧是要移动多少位。
左移几位相当于乘以2的几次方。
数 >> n位。>> 左侧是你要移动的数,右侧是要移动多少位。
右移几位相当于除以2的几次方。
三目运算符 ?:
完整格式 表达式1?表达式2:表达式3
如果表达式1是true的,则表达式2作为输出去。如果表达式1是false,则表达式3作为输出。
int x = 28;
int y = 42;
//int max = x > y ? x : y;
int result = x > y ? x*2+1 : x + y;
System.out.println(result);
运算顺序
一目>二目>三目>