首页 > 应用开发 > Java > JAVA基础学习-操作符学习总结
4.1 算数操作符
基本算数操作符: + - * /
练习求和
使用 从控制台获取两个数字,然后计算这两个数字的和。
public
class
Main
{
public
static
void
main
(
String
[
] args
)
{
Scanner sc
=
new
Scanner
(System
.in
)
;
int a
= sc
.
nextInt
(
)
;
int b
= sc
.
nextInt
(
)
;
System
.out
.
println
(a
+b
)
;
}
}

任意运算单元的长度超过int
如果有任何运算单元的长度超过int,那么运算结果就按照最长的长度计算:比如 int a = 5; long b = 6; a+b -> 结果类型是long
public
class
HelloWorld
{
public
static
void
main
(
String
[
] args
)
{
int a
=
5
;
long b
=
6
;
int c
=
(int
)
(a
+b
)
;
//a+b的运算结果是long型,所以要进行强制转换
long d
= a
+b
;
}
}
任意运算单元的长度小于int
如果任何运算单元的长度都不超过int,那么运算结果就按照int来计算: byte a = 1; byte b= 2; a+b -> int 类型
public
class
HelloWorld
{
public
static
void
main
(
String
[
] args
)
{
byte a
=
1
;
byte b
=
2
;
byte c
=
(byte
)
(a
+b
)
;
//虽然a b都是byte类型,但是运算结果是int类型,需要进行强制转换
int d
= a
+b
;
}
}
%取模
public
class
HelloWorld
{
public
static
void
main
(
String
[
] args
)
{
int i
=
5
;
int j
=
2
;
System
.out
.
println
(i
%j
)
;
//输出为1
}
}
自增 自减
以++为例:int i = 5。 i++,先取值,再运算。++i,先运算,再取值。
练习-自增
int i
=
1
;
int j
=
++i
+ i
++
+
++i
+
++i
+ i
++
;
2 + 2 + 4 + 5 + 5 = 18
练习-BMI
使用 收集你的身高体重,并计算出你的BMI值是多少
BMI的计算公式是 体重(kg) / (身高*身高)
比如邱阳波的体重是72kg, 身高是1.69,那么这位同学的BMI就是 72 / (1.69*1.69) = ?
package com
.company
;
import java
.util
.Scanner
;
public
class
Main
{
double bmi
;
public
void
jsbmi
(
)
{
while
(
true
)
{
Scanner scanner
=
new
Scanner
(System
.in
)
;
System
.out
.
println
(
"请输入身高(米):"
)
;
double height
= scanner
.
nextDouble
(
)
;
System
.out
.
println
(
"请输入体重(kg):"
)
;
double weight
= scanner
.
nextDouble
(
)
;
bmi
= weight
/
(height
* height
)
;
if
(bmi
<
18.5
)
{
System
.out
.
println
(
"当前的bmi:"
+ bmi
+
" "
+
"体重过轻"
)
;
}
else
if
(
18.5
<= bmi
&& bmi
<
24
)
{
System
.out
.
println
(
"当前的bmi:"
+ bmi
+
" "
+
"正常范围"
)
;
}
else
if
(
24
<= bmi
&& bmi
<
27
)
{
System
.out
.
println
(
"当前的bmi:"
+ bmi
+
" "
+
"体重过重"
)
;
}
else
if
(
27
<= bmi
&& bmi
<
30
)
{
System
.out
.
println
(
"当前的bmi:"
+ bmi
+
" "
+
"轻度肥胖"
)
;
}
else
if
(
30
<= bmi
&& bmi
<
35
)
{
System
.out
.
println
(
"当前的bmi:"
+ bmi
+
" "
+
"中度肥胖"
)
;
}
else
{
System
.out
.
println
(
"当前的bmi:"
+ bmi
+
" "
+
"重度肥胖"
)
;
}
System
.out
.
println
(
"是否结束循环(y/n)"
)
;
String sc
= scanner
.
next
(
)
;
}
}
public
static
void
main
(
String
[
] args
)
{
Main bmi
=
new
Main
(
)
;
bmi
.
jsbmi
(
)
;
}
}
4.2 关系操作符
关系操作符:比较两个变量之间的关系 > 大于 >= 大于或等于 < 小于 <= 小于或等于 == 是否相等 != 是否不等

4.3 逻辑操作符
长路与 和 短路与
无论长路与还是短路与,两边的运算单元都是布尔值。 都为真时,才为真;任意为假,就为假。 区别: 长路与 两侧,都会被运算; 短路与 只要第一个是false,第二个就不进行运算了。
public
class
HelloWorld
{
public
static
void
main
(
String
[
] args
)
{
//长路与 无论第一个表达式的值是true或者false,第二个的值,都会被运算
int i
=
2
;
System
.out
.
println
( i
==
1
& i
++
==
2
)
;
//无论如何i++都会被执行,所以i的值变成了3
System
.out
.
println
(i
)
;
//java学习交流:737251827 进入可领取学习资源及对十年开发经验大佬提问,免费解答!
//短路与 只要第一个表达式的值是false的,第二个表达式的值,就不需要进行运算了
int j
=
2
;
System
.out
.
println
( j
==
1
&& j
++
==
2
)
;
//因为j==1返回false,所以右边的j++就没有执行了,所以j的值,还是2
System
.out
.
println
(j
)
;
}
}

长路或 和 短路或
无论长路或还是短路或,两边的运算单元都是布尔值。 都为假时,才为假;任意为真,就为真。 区别: 长路或 两侧都会被运算;
短路或 只要第一个是true的,第二个就不进行运算了。
public
class
HelloWorld
{
public
static
void
main
(
String
[
] args
)
{
//长路或 无论第一个表达式的值是true或者false,第二个的值,都会被运算
int i
=
2
;
System
.out
.
println
( i
==
1
| i
++
==
2
)
;
//无论如何i++都会被执行,所以i的值变成了3
System
.out
.
println
(i
)
;
//短路或 只要第一个表达式的值是true的,第二个表达式的值,就不需要进行运算了
int j
=
2
;
System
.out
.
println
( j
==
2
|| j
++
==
2
)
;
//因为j==2返回true,所以右边的j++就没有执行了,所以j的值,还是2
System
.out
.
println
(j
)
;
}
}
取反:取反!真变为假,假变为真。
异或^:不同,返回真;相同,返回假。
练习-逻辑操作符
int i
=
1
;
boolean b
=
!
(i
++
==
3
)
^
(i
++
==
2
)
&&
(i
++
==
3
)
;
System
.out
.
println
(b
)
;
System
.out
.
println
(i
)
;
b = false;i = 3。
4.4 位操作符
一个整数的二进制表达
位操作都是对二进制而言的,但是我们平常使用的都是十进制比如5;而5的二进制是101。
所以在开始学习之前,需要掌握一个整数的二进制表达是多少。
通过Integer.toBinaryString() 方法,将一个十进制整数转换为一个二进制字符串。
public
class
HelloWorld
{
public
static
void
main
(
String
[
] args
)
{
int i
=
5
;
String b
=
(Integer
.
toBinaryString
(i
)
)
;
// 5的二进制的表达101
System
.out
.
println
(i
+
" 的二进制表达是: "
+b
)
;
}
}
位或
5的二进制是101;6的二进制是110。 所以 5|6 对每一位进行或运算,得到 111->7。
public
class
HelloWorld
{
public
static
void
main
(
String
[
] args
)
{
int i
=
5
;
int j
=
6
;
System
.out
.
println
(Integer
.
toBinaryString
(i
)
)
;
//5的二进制是101
System
.out
.
println
(Integer
.
toBinaryString
(j
)
)
;
//6的二进制是110
System
.out
.
println
(i
|j
)
;
//所以 5|6 对每一位进行或运算,得到 111->7
}
}
位与
5的二进制是101;6的二进制是110。
所以 5&6 对每一位进行与运算,得到 100->4。
public
class
HelloWorld
{
public
static
void
main
(
String
[
] args
)
{
int i
=
5
;
int j
=
6
;
System
.out
.
println
(Integer
.
toBinaryString
(i
)
)
;
//5的二进制是10
System
.out
.
println
(Integer
.
toBinaryString
(j
)
)
;
//6的二进制是110
System
.out
.
println
(i
&j
)
;
//所以 5&6 对每一位进行与运算,得到 100->4
}
}
异或
5的二进制是101;6的二进制是110。
所以 5^6 对每一位进行异或运算,得到 011->3。
一些特别情况:任何数和 自己 进行异或都等于 0;任何数和 0 进行异或都等于 自己。
public
class
HelloWorld
{
public
static
void
main
(
String
[
] args
)
{
int i
=
5
;
int j
=
6
;
System
.out
.
println
(Integer
.
toBinaryString
(i
)
)
;
//5的二进制是 101
System
.out
.
println
(Integer
.
toBinaryString
(j
)
)
;
//6的二进制是110
System
.out
.
println
(i
^j
)
;
//所以 5^6 对每一位进行或运算,得到 011->3
System
.out
.
println
(i
^
0
)
;
System
.out
.
println
(i
^i
)
;
}
}
取非
5 的二进制是 00000101;所以取反即为 11111010。 这个二进制换算成十进制即为-6。
public
class
HelloWorld
{
public
static
void
main
(
String
[
] args
)
{
byte i
=
5
;
System
.out
.
println
(Integer
.
toBinaryString
(i
)
)
;
//5的二进制是00000101,所以取非即为11111010,即为-6
System
.out
.
println
(
~i
)
;
}
}
左移 右移
左移:根据一个整数的二进制表达,将其每一位都向左移动,最右边一位补0; 右移:根据一个整数的二进制表达,将其每一位都向右移动。
public
class
HelloWorld
{
public
static
void
main
(
String
[
] args
)
{
byte i
=
6
;
//6的二进制是110
System
.out
.
println
(Integer
.
toBinaryString
(i
)
)
;
//6向左移1位后,变成1100,对应的10进制是12
System
.out
.
println
(i
<<
1
)
;
//6向右移1位后,变成11,对应的10进制是3
System
.out
.
println
(i
>>
1
)
;
}
}
练习-快速计算2x16
不用乘法符号(*) 计算 2x16
public
class
Main
{
public
static
void
main
(
String
[
] args
)
{
int i
=
2
;
System
.out
.
println
(i
<<
4
)
;
}
}
带符号右移与无符号右移
带符号右移 >> 对于正数, 带符号右移 >> 会把所有的位右移,并在最前面补0 对于负数, 带符号右移 >> 会把所有的位右移,并在最前面补1
无符号右移>>> 如果是一个负数,那么对应的二进制的第一位是1 无符号右移>>>会把第一位的1也向右移动,导致移动后,第一位变成0 这样就会使得负数在无符号右移后,得到一个正数
简单的说:
带符号右移 >> 移动后正的还是正的,负的还是负的, 符号不变;
**无符号右移>>>**移动后, 变正的了。
public
class
HelloWorld
{
public
static
void
main
(
String
[
] args
)
{
int i
=
-
10
;
//-10的二进制是11111111111111111111111111110110
//第一位是1,即符号位,代表这是一个负数
System
.out
.
println
(Integer
.
toBinaryString
(i
)
)
;
//对于正数, 带符号右移 >> 会把所有的位右移,并在最前面补0
//对于负数, 带符号右移 >> 会把所有的位右移,并在最前面补1
//-10带符号右移1位,移动后前面补齐1
//得到11111111111111111111111111111011
//因为第一位是1,所以依然是一个负数,对应的十进制是-5
int j
= i
>>
1
;
System
.out
.
println
(Integer
.
toBinaryString
(j
)
)
;
System
.out
.
println
(j
)
;
//-10无符号向右移1位,符号位也会向右移,第一位就变成了0
//得到01111111111111111111111111111011,对应的十进制是2147483643
int k
= i
>>>
1
;
System
.out
.
println
(Integer
.
toBinaryString
(k
)
)
;
System
.out
.
println
(k
)
;
}
}
练习-位操作符
int i
=
3
;
// 二进制是11
int j
=
2
;
// 二进制是10
int c
=
(
(i
| j
)
^
(i
& j
)
)
<<
2
>>>
1
;
c = 2。
4.5 赋值操作符
+=即自加;其他的 -= , *= , /= , %= , &= , |= , ^= , >>= , >>>= 都是类似,不做赘述。
4.6 三元操作符
三元操作符 ?:
三元操作符
表达式?值1:值2。如果表达式为真 返回值1;如果表达式为假 返回值2。
public
class
HelloWorld
{
public
static
void
main
(
String
[
] args
)
{
int i
=
5
;
int j
=
6
;
int k
= i
< j
?
99
:
88
;
// 相当于
if
(i
< j
)
{
k
=
99
;
}
else
{
k
=
88
;
}
System
.out
.
println
(k
)
;
}
}
练习-判断是否是工作日
public
static
void
main
(
String
[
] args
)
{
// TODO Auto-generated method stub
IsWeekend
(
)
;
}
public
static
void
IsWeekend
(
)
{
Scanner sc
=
new
Scanner
(System
.in
)
;
System
.out
.
println
(
"Please scan 1 to 7"
)
;
int input
= sc
.
nextInt
(
)
;
if
(
1
<= input
&&
7
>= input
)
{
String day
= input
>=
6
?
"Weekend"
:
"WorkingDay"
;
System
.out
.
println
(day
)
;
}
else
{
System
.out
.
println
(
"Scan worng, please reScan"
)
;
IsWeekend
(
)
;
}
}
4.7 Scanner
使用Scanner读取整数
import java
.util
.Scanner
;
public
class
HelloWorld
{
public
static
void
main
(
String
[
] args
)
{
Scanner s
=
new
Scanner
(System
.in
)
;
int a
= s
.
nextInt
(
)
;
System
.out
.
println
(
"第一个整数:"
+a
)
;
int b
= s
.
nextInt
(
)
;
System
.out
.
println
(
"第二个整数:"
+b
)
;
}
}
使用Scanner读取字符串
import java
.util
.Scanner
;
public
class
HelloWorld
{
public
static
void
main
(
String
[
] args
)
{
Scanner s
=
new
Scanner
(System
.in
)
;
String a
= s
.
nextLine
(
)
;
System
.out
.
println
(
"读取的字符串是:"
+a
)
;
}
}
读取了整数后,接着读取字符串
需要注意的是,如果在通过nextInt()读取了整数后,再接着读取字符串,读出来的是回车换行:"\r\n",因为nextInt仅仅读取数字信息,而不会 读取回车换行"\r\n"。
所以,如果在业务上需要读取了整数后,接着读取字符串,那么就应该连续执行两次nextLine(),第一次是取走回车换行,第二次才是读取真正的字符串
import java
.util
.Scanner
;
//java学习交流:737251827 进入可领取学习资源及对十年开发经验大佬提问,免费解答!
public
class
HelloWorld
{
public
static
void
main
(
String
[
] args
)
{
Scanner s
=
new
Scanner
(System
.in
)
;
int i
= s
.
nextInt
(
)
;
System
.out
.
println
(
"读取的整数是"
+ i
)
;
String rn
= s
.
nextLine
(
)
;
String a
= s
.
nextLine
(
)
;
System
.out
.
println
(
"读取的字符串是:"
+a
)
;
}
}
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70010294/viewspace-2847105/ ,如需转载,请注明出处,否则将追究法律责任。