《从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);
	}
}
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值