INT 类型长度溢出缺陷
读程序,猜答案吧!
[java] view plaincopyprint?
- public class IntOut {
- /** 纳秒->毫秒转换 */
- private static final int NANOTIME = 1000000;
- /** 轮询最长毫秒: 1000ms */
- private static int maxTimeOutMs = 1000;
- /** 轮询最长纳秒: 1000*1000000ns */
- private static int maxTimeOutNs = maxTimeOutMs * NANOTIME;
- public static void main(String[] args) {
- for (int i = 8; i < 13; i++) {
- if ((i * maxTimeOutNs) < ((i + 1) * maxTimeOutNs)) {
- System.out.println(i + “<” + (i + 1));
- } else {
- System.out.println(i + “>=” + (i + 1));
- }
- }
- }
- }
揭密答案啦!
[html] view plaincopyprint?
- 8<9
- 9<10
- 10>=11
- 11<12
- 12<13
为什么会出现10>=11的情况呢?
INT类型长度溢出了。INT类型的最大长度为-2147483648~2147483647。
11*maxTimeOutNs 变成负数了。 而11*maxTimeOutNs还是正数,所以会出现10>11的情况。
那么11>12又是什么情况呢?大家可以输出上面的每个值的结果看下哈。