自学内容网 自学内容网

《从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 了解一下
}
}

可以用二进制计算机计算一下来解释上述现象:

image-20240716214555160

由于最高位是符号位,变成了 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)!