整数运算
Java的整数运算规则遵循四则运算,可以使用任意嵌套的小括号。
溢出
在运算中需要注意的是,整数由于存在范围限制,如果计算结果超出了范围,就会产生溢出,而溢出不会报错,却会得到一个别的结果
例如 一个int类型的数值,超过了它的取值范围,(-2147483648到+2147483647)就会产生溢出,得到的值会是一个负数。
简写的运算符: +=,-= ,*= ,/=
n += 100; 相当于 n=n+100; n -= 100; 相当于 n= n-100;
自增、自减
Java还提供了 ++ 运算和 --运算,他们可以对一个整数进行加1和减1的操作;
注意++写在前面和后面计算结果是不同的,
++n表示先加1再引用n,
n++表示先引用n再加1。
移位运算
在计算机中,整数总是以二进制的形式表示。
int n = 7; // 00000000 00000000 00000000 00000111 = 7 int a = n >> 1; // 00000000 00000000 00000000 00000011 = 3 int b = n >> 2; // 00000000 00000000 00000000 00000001 = 1 int c = n >> 3; // 00000000 00000000 00000000 00000000 = 0
对一个负数进行右移,最高位的 1 不动。结果仍然是一个负数:
int n = -536870912; int a = n >> 1; // 11110000 00000000 00000000 00000000 = -268435456 int b = n >> 2; // 11111000 00000000 00000000 00000000 = -134217728 int c = n >> 28; // 11111111 11111111 11111111 11111110 = -2 int d = n >> 29; // 11111111 11111111 11111111 11111111 = -1
还有一种就是 无符号的右移运算使用 >>> 他的特点是不管符号位,右移后最高位总是补 0 ,因此对一个负数进行 >>> 运算,他会变成一个正数,原因是最高位的1 变成了 0.
int n = -536870912; int a = n >>> 1; // 01110000 00000000 00000000 00000000 = 1879048192 int b = n >>> 2; // 00111000 00000000 00000000 00000000 = 939524096 int c = n >>> 29; // 00000000 00000000 00000000 00000111 = 7 int d = n >>> 31; // 00000000 00000000 00000000 00000001 = 1
仔细观察可发现,左移实际上就是不断地×2,右移实际上就是不断地÷2。
位运算
& 与运算的规则是,两个数必须同时为1,结果才为1
n = 0 & 0; // 0 n = 0 & 1; // 0 n = 1 & 0; // 0 n = 1 & 1; // 1
| 或运算的规则是,只要任意一个为1,结果就为1;
n = 0 | 0; // 0 n = 0 | 1; // 1 n = 1 | 0; // 1 n = 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
运算优先级
Java的计算表达式中,运算优先级从高到底依次是:
()!~++--*/%+-<<>>>>>&|+=-=*=/=
浙公网安备 33010602011771号