Facebook Sharer
选择您要替换的背景颜色:
【农历新年】背景图片:
个性化设定
 注册  找回密码
查看: 2493|回复: 11
打印 上一主题 下一主题

纳闷 java long

[复制链接]

31

主题

0

好友

1228

积分

黄金长老

Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8

跳转到指定楼层
1#
发表于 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 了半天




收藏收藏0

8

主题

0

好友

75

积分

中级会员

Rank: 2Rank: 2

2#
发表于 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);


回复

使用道具 举报

46

主题

6

好友

6456

积分

百变名嘴

Rank: 13Rank: 13Rank: 13Rank: 13

3#
发表于 2009-12-22 03:38 PM |只看该作者

回复 #1 ~Zero 的帖子

正数 X 整数 做么会出 负数?
paiseh 不要怪我肤浅,问这样的问题


回复

使用道具 举报

7

主题

1

好友

5108

积分

一流名嘴

Rank: 12Rank: 12Rank: 12

4#
发表于 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 是否可以


回复

使用道具 举报

8

主题

0

好友

75

积分

中级会员

Rank: 2Rank: 2

5#
发表于 2009-12-22 03:50 PM |只看该作者

回复 #4 Super-Tomato 的帖子

c 的 result 還沒超出 64bits 範圍,  但是后面的30 * 24 * 60 * 60 * 1000 已经超出 32bits 範圍 。

java 内定是整数32bit的。

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


回复

使用道具 举报

8

主题

0

好友

75

积分

中级会员

Rank: 2Rank: 2

6#
发表于 2009-12-22 03:53 PM |只看该作者

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

因为overflow 发生

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


回复

使用道具 举报

7

主题

1

好友

5108

积分

一流名嘴

Rank: 12Rank: 12Rank: 12

7#
发表于 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 事件或記憶體溢出而終止程式運行


回复

使用道具 举报

7

主题

1

好友

5108

积分

一流名嘴

Rank: 12Rank: 12Rank: 12

8#
发表于 2009-12-22 03:57 PM |只看该作者
原帖由 qweasdzxc 于 2009-12-22 03:53 PM 发表
因为overflow 发生

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



沒錯, 第一位的 bit 是 signed 和 unsigned 的控制


回复

使用道具 举报

46

主题

6

好友

6456

积分

百变名嘴

Rank: 13Rank: 13Rank: 13Rank: 13

9#
发表于 2009-12-22 03:57 PM |只看该作者
原帖由 qweasdzxc 于 2009-12-22 03:53 PM 发表
因为overflow 发生

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



overflow 的话不是 会终止program吗?
抱歉现在没 IDE 测试。


回复

使用道具 举报

7

主题

1

好友

5108

积分

一流名嘴

Rank: 12Rank: 12Rank: 12

10#
发表于 2009-12-22 04:02 PM |只看该作者
原帖由 qweasdzxc 于 2009-12-22 03:53 PM 发表
因为overflow 发生

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



明白你的意思是說在 cache 中記憶體的演算


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

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

GMT+8, 2024-10-25 01:23 PM , Processed in 0.130943 second(s), 27 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

Ultra High-performance Dedicated Server powered by iCore Technology Sdn. Bhd.
Domain Registration | Web Hosting | Email Hosting | Forum Hosting | ECShop Hosting | Dedicated Server | Colocation Services
本论坛言论纯属发表者个人意见,与本论坛立场无关
Copyright © 2003-2012 JBTALKS.CC All Rights Reserved
合作联盟网站:
JBTALKS 马来西亚中文论坛 | JBTALKS我的空间 | ICORE TECHNOLOGY SDN. BHD.
回顶部