算数操作符
基本的有: + - * / %
自增 自减 :++ --
i++; 先取值,再运算
++i; 先运算,再取值
关系操作符
> 大于
>= 大于或等于
< 小于
<= 小于或等于
== 是否相等
!= 是否不等
逻辑运算符
&长路与,&&短路与
无论长路与还是短路与
两边的运算单元都是布尔值
都为真时,才为真
任意为假,就为假
区别
长路与 两侧,都会被运算
短路与 只要第一个是false,第二个就不进行运算了
| 长路或,||短路或;
无论长路或还是短路或
两边的运算单元都是布尔值
都为假时,才为假
任意为真,就为真
区别
长路或 两侧都会被运算
短路或 只要第一个是true的,第二个就不进行运算了
取反!
真变为假
假变为真
异或^
不同,返回真
相同,返回假
位操作运算符
通过Integer.toBinaryString() 方法,将一个十进制整数转换为一个二进制字符串
1 2 3 4 5 6 7 |
|
位或
5的二进制是101
6的二进制是110
所以 5|6 对每一位进行或运算,得到 111->7
位与
5的二进制是101
6的二进制是110
所以 5&6 对每一位进行与运算,得到 100->4
异或
5的二进制是101
6的二进制是110
所以 5^6 对每一位进行异或运算,得到 011->3
一些特别情况:
任何数和自己进行异或 都等于 0
任何数和0 进行异或 都等于自己
1 2 3 4 5 6 7 8 9 10 11 12 |
|
取非
5 的二进制是 00000101
所以取反即为 11111010
这个二进制换算成十进制即为-6
左移 右移
左移:根据一个整数的二进制表达,将其每一位都向左移动,最右边一位补0
右移:根据一个整数的二进制表达,将其每一位都向右移动
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
带符号右移与无符号右移
带符号右移 >>
对于正数, 带符号右移 >> 会把所有的位右移,并在最前面补0
对于负数, 带符号右移 >> 会把所有的位右移,并在最前面补1
无符号右移>>>
如果是一个负数,那么对应的二进制的第一位是1
无符号右移>>>会把第一位的1也向右移动,导致移动后,第一位变成0
这样就会使得负数在无符号右移后,得到一个正数
简单的说:
带符号右移 >> 移动后正的还是正的,负的还是负的,符号不变
无符号右移>>>移动后,变正的了
二进制左移一位相当于*2;
二进制右移一位相当于/2;
2*16 = 2<<4;
左移要比乘法运算快,在某种情况下很适合
赋值操作符
对本身进行运算,并赋值
+=即自加
i+=2;
等同于
i=i+2;
其他的 -= , *= , /= , %= , &= , |= , ^= , >>= , >>>= 都是类似。
int i = 1;
i+ = ++i
输出为3
三元操作符
表达式?值1:值2
如果表达式为真 返回值1
如果表达式为假 返回值2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
使用Scanner读取整数
注意: 使用Scanner类,需要在最前面导入
import java.util.Scanner;
1 2 3 4 5 6 7 8 9 10 11 |
|
使用Scanner读取浮点数
1 2 3 4 5 6 7 8 9 10 |
|
使用Scanner读取字符串
1 2 3 4 5 6 7 8 9 |
|
读取了整数后,接着读取字符串
需要注意的是,如果在通过nextInt()读取了整数后,再接着读取字符串,读出来的是回车换行:"\r\n",因为nextInt仅仅读取数字信息,而不会读取回车换行"\r\n".
所以,如果在业务上需要读取了整数后,接着读取字符串,那么就应该连续执行两次nextLine(),第一次是取走回车换行,第二次才是读取真正的字符串
1 2 3 4 5 6 7 8 9 10 11 12 |
|