转义字符
- 通过反斜杠改变后面所跟字符的含义
System.out.println("hello " world");
System.out.println("hello \” world");
//windows下的换行是\r\n,linux下的换行是\n
System.out.println("hello\r\n \\ world");
System.out.println("hello\r\n \\no! \b");
算数运算符
+ | - | * | / | % | ++ | – |
---|---|---|---|---|---|---|
加 | 减 | 乘 | 除 | 余 | 自增 | 自减 |
-
%求余结果的正负由被除数决定
System.out.println(5%2);//1 System.out.println(5%-2);//1 System.out.println(-5%2);//-1 System.out.println(-5%-2);//-1
int num = 4567; int ge=num%10; int shi=num/10%10; int bai=num/100%10; int qian=num/1000;
-
x++、++x的区别
int a=5,b; b=a++;//先取变量a的值赋给左边的变量,然后a再自增 System.out.println("a==" + a + ", b==" + b); c=++a;//a先自增,再取变量a的值赋给左边的变量 System.out.println("a==" + a + ", c==" + c);
int x=2,y; y = x++ + x++ + ++x ;//y=2+3+5=10
赋值运算符
= | a+=5 | a-=5 | *= | /= | %= |
---|---|---|---|---|---|
赋值 | a=a+5 | a=a-5 | a=a*5 | a=a/5 | a=a%5 |
int a=66;
a+=5;
short s=5;
//s=s+6;//不兼容的类型:从int转换到short可能会有损失
s+=6;//内部做了类型转换
System.out.println(s);
关系运算符
> | >= | < | <= | == | != |
---|---|---|---|---|---|
大于 | 大于或等于 | 小于 | 小于或等于 | 等于 | 不等于 |
-
使用关系运算符,结果只有两种可能,要么关系成立,要么关系不成立
- 关系成立,值为true
- 关系不成立,值为false
-
表达式:由变量(常量)和运算符组合在一起形成的式子
表达式是有值的
int a=55,b=66; System.out.println(a>b);//false 输出的是表达式a>b的值 System.out.println(a<b);//true System.out.println(88>66);//true System.out.println(a=99);//99 赋值表达式,赋的值就是整个表达式的值 System.out.println(a==99);//false System.out.println(a!=b);//true System.out.println(a+b);//算术表达式
逻辑运算符
! | && | || | & | | |
---|---|---|---|---|
非 | (短路)与 | (短路)或 | 与 | 或 |
-
&&:短路与,如果左边的表达式的值为false,那么就不在计算右边表达式的值了
-
&:如果左边的表达式的值为false,仍然计算右边表达式的值
true && true == true
true && false == false
false && true == false
false && false == false -
||:短路或,如果左边的表达式的值为true,那么就不在计算右边表达式的值了
-
|:如果左边的表达式的值为true,仍然计算右边表达式的值
true && true == true
true && false == true
false && true == true
false && false == false -
!:非
- 取反
位运算符
& | | | ^ | ~ | << | >> | >>> |
---|---|---|---|---|---|---|
按位与 | 按位或 | 按位异或 | 按位取反 | 左移 | 右移 | 无符号右移 |
-
&:按位与
-
6&3
0000 0110 →6
0000 0011 →3
0000 0010 →2 -
“与运算”的特殊用途:
(1)清零。如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零。
(2)取一个数中的指定位
方法:找一个数,对应X要取的位,该数的对应位为1,其余位为零,此数与X进行“与运算”可以得到X中的指定位。
例:设X=10101110,
取X的低4位,用 X & 0000 1111 = 0000 1110 即可得到;
还可用来取X的2、4、6位。
-
-
|:按位或
-
7|4
0000 0110 →6
0000 0011 →3
0000 0010 →2
-
-
^:按位异或
-
两个数不同,结果为1
-
一个数异或同一个数两次,还是自身这个数
-
6^5
0000 0110 →6
0000 0101 →5
0000 0011 →3
0000 0101 →5
0000 0110 →6
-
-
~:按位取反
-
正数按位取反不+1,结果为其负数-1
负数的补码是其正数的原码按位取反+1
System.out.println(~8);//-9
0000 1000 →8
1111 0111 (计算机内部用补码进行运算
高位是1,可判断出,是负数的补码)
1111 0110 (负数的反码)
0000 1001 (其正数的原码 值为9)
-
-
<<:左移
-
左移,低位补0
-
6<<2
|00000000 00000000 00000000 00000110 →6
00|00000000 00000000 00000000 00001100 →6*22==24
-
-
x>>y:右移
-
高位是什么,就补什么
-
6>>2
00000000 00000000 00000000 00000110| →6
00000000 00000000 00000000 00000001|10 →6/22==1 -
-6>>2
11111111 11111111 11111111 11111010| → -6
11111111 11111111 11111111 11111110|10 →
00111111 11111111 11111111 11111101(反码)
00000000 00000000 00000000 00000010(原码)
-
-
x>>>y:无符号右移
-
高位补0,因为补的是0,不会改变二进制位
-
-6>>>2
11111111 11111111 11111111 11111010| → -6
00111111 11111111 11111111 11111110|10 → 2
00111111 11111111 11111111 11111101(反码)
00000000 00000000 00000000 00000010(原码)
-
三元运算符
-
判断 ? 为true取值 : 为false取值
int a = 5, b = 7, c; c = a > b ? a : b; System.out.println(c);//7