《从C/C++到Java入门指南》- 6.整数运算
变量运算
整数运算
和 C/C++ 一样,整数运算只会保留整数的部分
public class Hello {
public static void main(String[] args) {
int x = 8 / 3;
System.out.println(x);
}
}
输出结果:
2
特别注意,java 中整数加减溢出后不会报错,而是会得到一个奇怪的值:
public class Hello {
public static void main(String[] args) {
int x = 2147483640;
int y = 15;
int sum = x + y;
System.out.println(sum);// 结果为 -2147483641 了解一下
}
}
可以用二进制计算机计算一下来解释上述现象:
由于最高位是符号位,变成了 1,所以成为了一个负数。
之前忘记说了,最高位上面
0
表示正,1
表示负。
快捷运算
C/C++ 中有的自增和自减以及简写运算符号都可以正常使用:++
、--
、+=
…
移位运算
java 中的移位运算也和 C/C++ 保持一致,使用>>
/<<
。
public class Hello {
public static void main(String[] args) {
int n = 7;// 0111
System.out.println(n << 1);// 14 -> 1110
System.out.println(n >> 1);// 3 -> 0011
}
}
正整数
public class Hello {
public static void main(String[] args) {
int n = 7;
int d = n << 29;
System.out.println(d); // -536870912
}
}
负数右移
对一个负数右移,最高位还是 1,其余位右移,整体不动。
位运算
将两个数按位对齐然后进行运算
&
表示与运算|
表示或运算~
表示非运算
运算优先级
Java 中运算优先级从高到低依次为:
()
!
~
++
--
*
/
%
+
-
<<
>>
>>>
&
|
+=
-=
*=
/=
类型自动提升与强制转型
类型自动提升
当两个变量运算类型不一致时,计算结果会自动提升至大类型的变量。
public class Hello {
public static void main(String[] args) {
short x = 32767;
short y = 100;
int sum = x + y;
//short sum = x + y;// 会报错
}
}
强制转型
反过来也可以,也就是可以将大范围的数强制转型到小范围。
public class Hello {
public static void main(String[] args) {
int x = 12345;
short y = (short) x;
System.out.println(y);
}
}
但是要注意,超过类型会舍弃 short 外面的位数。
public class Hello {
public static void main(String[] args) {
int x = 123458;
short y = (short) x;
System.out.println(y);// -7614
}
}
这里因为 x 被舍弃了最高的两位,只保留了最低的两位,所以转型的结果显然错误。
课后练习
题目
计算前 N 个数的求和(提示: n ( n + 1 ) 2 \frac{n(n+1)}{2} 2n(n+1))
答案
public class Hello {
public static void main(String[] args) {
System.out.println(100 * 101/2);
}
}
原文地址:https://blog.csdn.net/2301_79640368/article/details/140544856
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!