Java解惑之长整型
来源:互联网 发布:经典牛牛开挂软件神器 编辑:程序博客网 时间:2024/04/29 13:24
谜题3-长整型
标签(空格分隔): Java解惑
话说有这样一个小例子:
MICROS_PER_DAY表示一天的微秒数
MILLIS_PER_DAY表示一天的毫秒数
然后下面例子的结果是多少呢?
public class Test3 { public static void main(String[] args) { final long MICROS_PER_DAY = 24 * 60 * 60 * 1000 * 1000; final long MILLIS_PER_DAY = 24 * 60 * 60 * 1000; System.out.println(MICROS_PER_DAY / MILLIS_PER_DAY); }}
So easy
数据类型为 long
,很容易保存这两个乘积不产生溢出.
因此,结果肯定是 1000
!
but…..
结果是:
解释:
为什么答案与我们想象不一样呢?
因为数据溢出了…
你在逗我? 但我没学过java?
long能表示 -2的63次方到2的63次方-1的整数.
数都数不过来,怎么会溢出?
哈哈,小心陷阱啊,虽然我们定义的是long
类型,
准确的说最终的结果应该是long
类型的.
我们看看表达式右边, 24 * 60 * 60 * 1000 * 1000
这个表达式是以int
类型作为运算的, int
跟int
类型相乘,结果还是int
类型,
最终结果超过int所能保存的范围,所以数据溢出了,
然后才被long
所保存;
改进 24 * 60 * 60 * 1000 * 1000
–>24L * 60 * 60 * 1000 * 1000
在表达式随便哪个数值后面加上一个l
或者L
就搞定了,
其结果会自动转换为long
而不是int
了,然后再保存到long
类型变量中.
就是这么简单,就是这么任性.
0 0
- Java解惑之长整型
- java解惑之长整除
- java解惑--------长整除
- 【java解惑】整型溢出的循环控制变量
- C#长整型时间与java长整型时间转换
- C#长整型时间与java长整型时间转换
- Java解惑1-3长整数
- java解惑㈡——长整除
- 【java解惑】长整数计算防止溢出
- java解惑--谜题3:长整除
- JAVA IP地址转成长整型方法
- 《Java解惑》系列——01表达式之谜——谜题03:长整除
- java小Tips之 长整型变量标示字母要用大写避免歧义
- java解惑之奇偶性
- java解惑之大问题
- java解惑之Calendar
- java解惑之再探取余
- java解惑之final
- LRU Cache
- Leetcode#2 AddTwoNumbers
- 【codeforces】Codeforces Round #311 (Div. 2)only 【题解】
- 备忘:javax.net.ssl.SSLHandshakeException: com.ibm.jsse2.util.h: No trusted certificate found
- c++学习 - int 和 string 的相互转换
- Java解惑之长整型
- iOS蓝牙编程
- 利用istreamstring和sscanf读取输入一行数据中的整数
- ZZCustomAlertView - 一个高度自定义的iOS模态弹窗
- CSDN使用技巧(不间断更新)
- N-Queens
- N-Queens II
- #leetcode#Basic Calculator
- 用python读写excel(xlrd、xlwt)