一、整数运算
1. 整数运算永远得到整数(包括除法)。
举例:
public class TestIntCal {
public static void main(String[] args){
int x = 12345/67; //除法:获得结果的整数部分
int y = 12345%67; //余数:获得除法的余数
//int z = 12345/0; //编译不出错,但运行时报错
System.out.print("x=");
System.out.println(x);
System.out.print("y=");
System.out.println(y);
// System.out.print("z=");
// System.out.println(z);
}
}
>> 正常输出:
>> 如执行int z = 12345/0,输出如下(无其他输出):
- 整数/0:编译不会报错,运行时报错。
- 溢出:超出int/long长度则溢出,int溢出可改为long类型。
2、自加/自减
Java提供“++”和“--”自身+1和自身-1操作,举例:
public class TestIntCal2 {
public static void main(String[] args){
int n = 200;
n++;
n--;
int y1 = 100 + (n++); //y=100+n
int y2 = 100 + (++n); //y=100+(n+1)
System.out.print("n=");
System.out.println(n);
System.out.print("y1=");
System.out.println(y1);
System.out.print("y2=");
System.out.println(y2);
}
}
输出:
★注意:n++和++n的区别:
- n++:在当前语句执行后+1;
- ++n:在当前语句执行前+1。
3. 移位运算
Java提供整数的移位运算。
- (有符号)左移:<<,右移:>>;(不循环,补0,负数最高位不变,正数最高位变1后不变)
- (无符号)右移:>>>。(最高位置0后,其他位移动,补0)
举例:
整数7的二进制表示为:00000000 00000000 00000000 00000111;
整数-7的二进制表示为:11111111 11111111 11111111 11111001。(7的二进制、取反、+1)
- 左移1位:7<<1:7*2=14 (00000000 00000000 00000000 00001110)
- 右移1位:7>>1:7/2=3 (00000000 00000000 00000000 00000011)
- 左移29位:7<<29: -7^29 = - 536870912 (11000000 00000000 00000000 00000000)
- 无符号右移1位:+7>>>1:7/2 = 3(00000000 00000000 00000000 00000011)
- 无符号右移1位: -7>>>1:2147483644(01111111 11111111 11111111 1111 1100)
-
对byte和short类型进行位移时,会转换为int再进行位移。
-
左移=*2,右移+2
4. 位运算
按位进行“与”、“或”、“非”、“异或”的运算。
位运算 | 规则 |
与(&) | a=1, b=1 >> 1; 其他为0 |
或(|) | a=1 或 b=1 >> 1; 其他为0 |
非(~) | a = 1 >> -2 因为是按位操作!!(1: 00000000 00000000 00000001)-->(-2: 11111111 11111111 11111111 11111110); a = 0 >> -1(11111111 11111111 11111111 11111111) |
异或(^) | a=0, b=0 >> 0 a=1, b=0 >> 1 a=1, b=1 >> 0 |
5. 运算优先级
()
!
~
++
--
*
/
%
+
-
<<
>>
>>>
&
|
+=
-=
*=
/=
6. 不同类型的运算
- 在运算过程中,若参与运算的两个数类型不一致,则计算结果为较大类型的整型。
- 也可以用"(类型)"强制转换。