第一篇java代码
初次接触java,令我印象最深的是# 我写的第一行 Java 代码,不只是 “Hello World”
大一新生,刚学 Java几周,尚无大的突破, 可我记得我第一次接触java代码时的思考。所以我将我最初的思考记录,并由此作为我java生涯的开端
public class test {
public static void main(String[] args) {
int a = 214748364734;
int b = 324890234089;
int c = a + b;
System.out.println(a + " + " + b + " = " + c);
}
}
我写下的第一串java代码,是计算两个数的值之和的最大范围,我在int a,b时随机敲下两个超长串数字,并定义a,b之和为c,我想看它到底可以承受多大的数字运算。在我点下运行键时,编译报错:整数太大!
我想,既然它无法支持12位数的加法计算,那么他的最大计算范围是多少,有没有一个准确的阈值?可以精确到一个确切的整数。
我在网上寻找合理解释:Java 中 int 是 32 位有符号整数,即:(1 位符号位 + 31 位数值位),由此可以考虑,最大值范围为2^31 - 1 = 2147483647,最小值的范围为 -2147483648。会看我的计算:12位数的运算已经远远超过了代码的计算范围,所以这里的结果是无法计算出来的。
那么不由得引发思考:假设将两个int的极限值相加,是否可以得出结果呢?于是我修改代码为:
public class test {
public static void main(String[] args) {
int a = 2147483647;
int b = 2147483647;
int c = a + b;
System.out.println©;
System.out.println(a + " + " + b + " = " + c);
}
}
得出结果为:-2。
显然:2147483647 + 2147483647 = 4294967294,这个结果 4294967294 已经超出了 int 的范围,可是没有出现报错的结果。
我查找资料,该计算由二进制完成,我结合自己思考做出如下结论:将两数换成二进制计算, 01111111 11111111 11111111 11111111+ 01111111 11111111 11111111 11111111= 11111111 11111111 11111111 11111110。除了最低位是 0,其他 31 位全是 1,全 1 的 32 位数 = 2^32 - 1 = 4294967295,但这里最低位是 0,所以少 1 → 4294967294,把 int 想象成一个圆盘(钟表),从 0 开始,正着加:0, 1, 2, …, 2147483647,再加 1,没有 2147483648,直接翻到 -2147483648,继续加:-2147483647, -2147483646, …一直加到 -2。
这是我第一次使用java时随手写的代码,当时没想那么多,只是很疑惑为什么计算不出答案,试着去解决问题。
这是一串很简单的代码,以后再看会觉得这次的思考很幼稚。关于两个int 相加最大值的解释有很多逻辑疏漏,但是这是我学习java的第一步。