Java 基础语法 Part4
在有关我笔记分享的博客中,我都会将MD笔记文件另外发布,方便朋友们下载学习。(粉丝可下载)
本期笔记文件下载地址:https://download.csdn.net/download/lbwnbnbnbn/15225075
Ayo大家好我是Tomatooo,这是我的Java学习笔记第4期,话不多说直插主题——
运算
整数运算
Java整数运算遵循四则运算原则,可以使用括号等
整数在运算时只会保留整数部分,并不像设想的那样会四舍五入
求余运算使用%
示例:
int a = 66666%123 //这里是求66666/123的余数
特别注意:整数的除法对于除数为0时运行时将报错,但编译不会报错。
溢出
之前笔记提到过,整数存在范围限制,如果计算结果超出了范围,就会造成溢出,而溢出不会出错,只会得到一个意料之外的结果
自增/自减
Java提供了++
运算和--
运算,它们可以对一个整数进行加1和减1的操作
注意:++
写在前面和后面计算结果是不同的,++n
表示先加1再引用n,n++
表示先引用n再加1。
移位运算
在计算机中,整数总是以二进制的形式表示。
例如,
int
类型的整数7
使用4字节表示的二进制如下:
00000000 00000000 00000000 00000111
可以对整数进行移位运算。对整数
7
左移1位将得到整数14
,左移两位将得到整数28
示例:
int n = 7; // 00000000 00000000 00000000 00000111 = 7
int a = n << 1; // 00000000 00000000 00000000 00001110 = 14
int b = n << 2; // 00000000 00000000 00000000 00011100 = 28
int c = n << 28; // 01110000 00000000 00000000 00000000 = 1879048192
int d = n << 29; // 11100000 00000000 00000000 00000000 = -536870912
左移29位时,由于最高位变成
1
,因此结果变成了负数。同理,右移符号为>>
还有一种无符号的右移运算,使用>>>
,它的特点是不管符号位,右移后高位总是补0
,因此,对一个负数进行>>>
右移,它会变成正数,原因是最高位的1
变成了0
对byte
和short
类型进行移位时,会首先转换为int
再进行位移。
仔细观察可发现,左移实际上就是不断地×2,右移实际上就是不断地÷2。
位运算
与、或、非和异或的运算
- 与运算:必须两个数同时为
1
,结果才为1
- 或运算:只要任意一个为
1
,结果就为1
- 非运算:
0
和1
互换
示例:
n = ~0; // 1
n = ~1; // 0
- 异或运算:如果两个数不同,结果为
1
,否则为0
示例:
n = 0 ^ 0; // 0
n = 0 ^ 1; // 1
n = 1 ^ 0; // 1
n = 1 ^ 1; // 0
对两个整数进行位运算,实际上就是按位对齐,然后依次对每一位进行运算。
public class Main {
public static void main(String[] args) {
int i = 167776589; // 00001010 00000000 00010001 01001101
int n = 167776512; // 00001010 00000000 00010001 00000000
System.out.println(i & n); // 167776512
}
}
运算优先级
在Java的计算表达式中,运算优先级从高到低依次是:
()
!
~
++
--
*
/
%
+
-
<<
>>
>>>
&
|
+=
-=
*=
/=
不用全部记住,要确保正确只要加括号就好