论坛首页 Java企业应用论坛

int a=200*100000000;a =

浏览 12984 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (3)
作者 正文
   发表时间:2011-10-08  
aa87963014 写道
我的马甲01 写道
aa87963014 写道
543089122 写道



计算机又不知道计算出的结果毫无意义,人家只知道除0它搞不定(抛异常),其他都能搞定



这个结果本身属于溢出。既然溢出本身就应该是错的。既然知道除0是错的(抛异常)
为何溢出又不是错的,不抛异常?


你傻啊,溢出 =!异常
溢出 谁跟你说错了?

而且编码和解码中经常会出现溢出后的值运算

我是傻,从没见过溢出后的值计算。

麻烦举个例子?

散列和二进制计算里 故意溢出多的是。溢出就溢出了,溢出又不是错误,为什么要抛异常????
0 请登录后投票
   发表时间:2011-10-08   最后修改:2011-10-08
aa87963014 写道
我的马甲01 写道
aa87963014 写道
543089122 写道



计算机又不知道计算出的结果毫无意义,人家只知道除0它搞不定(抛异常),其他都能搞定



这个结果本身属于溢出。既然溢出本身就应该是错的。既然知道除0是错的(抛异常)
为何溢出又不是错的,不抛异常?


你傻啊,溢出 =!异常
溢出 谁跟你说错了?

而且编码和解码中经常会出现溢出后的值运算

我是傻,从没见过溢出后的值计算。

麻烦举个例子?


计算机的CPU是不会算减法的,那么减法是怎么做的? x - y = x + y的补数。
什么叫补数?反数加1。
什么叫反数?11111111减去y就是y的反数。 (在计算机内部可以直接按位取反,不用真的去算这个减法)
为什么x加上y的补数就是x-y?
因为 x + (11111111-y+1) = x + (11111111+1) - y = x + (100000000) - y = x + 0 - y = x - y
为什么100000000 = 0?因为溢出了。
如果溢出要报异常,所有减法都要try catch了
1 请登录后投票
   发表时间:2011-10-08  
iminto 写道
aa87963014 写道
我的马甲01 写道
aa87963014 写道
543089122 写道



计算机又不知道计算出的结果毫无意义,人家只知道除0它搞不定(抛异常),其他都能搞定



这个结果本身属于溢出。既然溢出本身就应该是错的。既然知道除0是错的(抛异常)
为何溢出又不是错的,不抛异常?


你傻啊,溢出 =!异常
溢出 谁跟你说错了?

而且编码和解码中经常会出现溢出后的值运算

我是傻,从没见过溢出后的值计算。

麻烦举个例子?

散列和二进制计算里 故意溢出多的是。溢出就溢出了,溢出又不是错误,为什么要抛异常????

我没接触过散列计算,但是溢出不是错误那还有什么是错误?

如果这个溢出不是错误,难道这个 - xxxx 结果是正确的?
0 请登录后投票
   发表时间:2011-10-08  
aa87963014 写道
iminto 写道
aa87963014 写道
我的马甲01 写道
aa87963014 写道
543089122 写道



计算机又不知道计算出的结果毫无意义,人家只知道除0它搞不定(抛异常),其他都能搞定



这个结果本身属于溢出。既然溢出本身就应该是错的。既然知道除0是错的(抛异常)
为何溢出又不是错的,不抛异常?


你傻啊,溢出 =!异常
溢出 谁跟你说错了?

而且编码和解码中经常会出现溢出后的值运算

我是傻,从没见过溢出后的值计算。

麻烦举个例子?

散列和二进制计算里 故意溢出多的是。溢出就溢出了,溢出又不是错误,为什么要抛异常????

我没接触过散列计算,但是溢出不是错误那还有什么是错误?

如果这个溢出不是错误,难道这个 - xxxx 结果是正确的?


11111111 是-1的补码,
如果-1+1,那么就是11111111+1=0,这里就溢出,难道这样就要抛异常吗?
0 请登录后投票
   发表时间:2011-10-08  
aa87963014 写道
iminto 写道
aa87963014 写道
我的马甲01 写道
aa87963014 写道
543089122 写道



计算机又不知道计算出的结果毫无意义,人家只知道除0它搞不定(抛异常),其他都能搞定



这个结果本身属于溢出。既然溢出本身就应该是错的。既然知道除0是错的(抛异常)
为何溢出又不是错的,不抛异常?


你傻啊,溢出 =!异常
溢出 谁跟你说错了?

而且编码和解码中经常会出现溢出后的值运算

我是傻,从没见过溢出后的值计算。

麻烦举个例子?

散列和二进制计算里 故意溢出多的是。溢出就溢出了,溢出又不是错误,为什么要抛异常????

我没接触过散列计算,但是溢出不是错误那还有什么是错误?

如果这个溢出不是错误,难道这个 - xxxx 结果是正确的?



不知者无畏...int是基本数据类型.直接操作的就是位了.并没有在外面做封装..
也就是java既然有了Integer为啥非要用int..
如果java把基本数据类型全部包装掉..我感觉性能上肯定有很大的问题了


还有.散列..hash...你看看String类的hash你就明白了...

能想到这个例子的哥们不错....这道题的错是你在.本该是long级别的数据费用要int来处理..


如果这个都抛出异常..那么jdk都跑不起来了...
0 请登录后投票
   发表时间:2011-10-09  
计算机对数值的算法一般是左移右移异或等操作。当数值超出范围计算机并不知道。
0 请登录后投票
   发表时间:2011-10-09  
IcyFenix 写道
aa87963014 写道
为什么不直接抛出异常


因为虚拟机规范中明确规定了这种情况不抛异常,看imul指令的定义:


在int数加减乘除(iadd、isub、imul、idiv)中,只有idiv指令可能因除数为0抛出ArithmeticException异常。其他3个指令都明确规定没有任何异常抛出。



弱问,图片来自哪本书? word版本的  还是你自己写的?
0 请登录后投票
   发表时间:2011-10-09  
say4ever2u 写道

弱问,图片来自哪本书? word版本的  还是你自己写的?

http://www.iteye.com/topic/1115940
0 请登录后投票
   发表时间:2011-10-09  
请复习java API和计算机原理关于二进制进位的章节。。。
0 请登录后投票
   发表时间:2011-10-09  
计算机以整数的二进制补码表示整数。以这种形式表示整数就无所谓溢出,计算机认为楼主的结果是正常结果。计算机原理讲的很清楚。
所谓溢出只是方便人理解提出的概念。实际上计算机是不关心这个的。
这是cpu和内存本身的特性决定,jvm是虚拟机,既然是虚拟机自然要尽量模拟真实的计算机,所以jvm的标准也这么规定。貌似还没有哪种语言认为这种情况应该抛出异常。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics