|登录 |注册

查看: 2816|回复: 11
打印 上一主题 下一主题

纳闷 java long

[复制链接]
~Zero
2009-12-22 02:57 PM
  1. long a = 24 * 60 * 60 * 1000;
  2. System.out.println(a);

  3. long b = 30 * a;
  4. System.out.println(b);

  5. long c = 30 * 24 * 60 * 60 * 1000;
  6. System.out.println(c);
复制代码


结果出来,
a = 86400000
b = 2592000000
c = -1702967296

害我 debug 了半天
qweasdzxc
2009-12-22 03:34 PM
default is int value
但超过就会有负数

int  is 32bit     

     正确答案  
=========================
     long a = 24 * 60 * 60 * 1000;
      System.out.println(a);

      long b = 30 * a;
      System.out.println(b);
// 强硬转成long type
      long c = 30 * 24 * 60 * 60 * 1000l;
      System.out.println(c);

回复 #1 ~Zero 的帖子

宅男-兜着走
2009-12-22 03:38 PM
正数 X 整数 做么会出 负数?
paiseh 不要怪我肤浅,问这样的问题
Super-Tomato
2009-12-22 03:42 PM
原帖由 ~Zero 于 2009-12-22 02:57 PM 发表
long a = 24 * 60 * 60 * 1000;
System.out.println(a);

long b = 30 * a;
System.out.println(b);

long c = 30 * 24 * 60 * 60 * 1000;
System.out.println(c);

结果出来,
a = 86400000
b = 259 ...



c 的 result 應該還沒超出 64bits 範圍, 為何會是負值?
那ㄇ你用看看 BigInteger 是否可以

回复 #4 Super-Tomato 的帖子

qweasdzxc
2009-12-22 03:50 PM
c 的 result 還沒超出 64bits 範圍,  但是后面的30 * 24 * 60 * 60 * 1000 已经超出 32bits 範圍 。

java 内定是整数32bit的。

[ 本帖最后由 qweasdzxc 于 2009-12-22 03:54 PM 编辑 ]

回复 #3 宅男-兜着走 的帖子

qweasdzxc
2009-12-22 03:53 PM
因为overflow 发生

32bit 的  最后一位bit是控制正负的。
Super-Tomato
2009-12-22 03:55 PM
原帖由 qweasdzxc 于 2009-12-22 03:34 PM 发表
default is int value
但超过就会有负数

int  is 32bit     

     正确答案  
=========================
     long a = 24 * 60 * 60 * 1000;
      System.out.println(a);

      long b = 30  ...



並不是超過就會有負數, 而是需要看 bit 的變化, 真正的超出 datatype 範圍自然程式就會觸發 exception 事件或記憶體溢出而終止程式運行
Super-Tomato
2009-12-22 03:57 PM
原帖由 qweasdzxc 于 2009-12-22 03:53 PM 发表
因为overflow 发生

32bit 的  最后一位bit是控制正负的。



沒錯, 第一位的 bit 是 signed 和 unsigned 的控制
宅男-兜着走
2009-12-22 03:57 PM
原帖由 qweasdzxc 于 2009-12-22 03:53 PM 发表
因为overflow 发生

32bit 的  最后一位bit是控制正负的。



overflow 的话不是 会终止program吗?
抱歉现在没 IDE 测试。
Super-Tomato
2009-12-22 04:02 PM
原帖由 qweasdzxc 于 2009-12-22 03:53 PM 发表
因为overflow 发生

32bit 的  最后一位bit是控制正负的。



明白你的意思是說在 cache 中記憶體的演算
您需要登录后才可以回帖 登录 | 注册

JBTALKS.CC |联系我们 |隐私政策 |Share

GMT+8, 2026-1-1 08:02 AM , Processed in 0.108924 second(s), 25 queries .

Powered by Discuz! X2.5 © 2001-2012 Comsenz Inc.

本论坛言论纯属发表者个人意见,与本论坛立场无关
Copyright © 2003-2012 JBTALKS.CC All Rights Reserved

Dedicated Server powered by iCore Technology Sdn. Bhd.

合作联盟网站:
JBTALKS 马来西亚中文论坛 | JBTALKS我的空间 | ICORE TECHNOLOGY SDN. BHD.
回顶部