A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王小五-fight 中级黑马   /  2013-4-11 19:00  /  1690 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王小五-fight 于 2013-4-11 21:46 编辑

/*测试当给变量赋值超过其最大范围时,它会如何给出结果;其中a1所赋值为其int类型的最大值
*/
class Zhuanhuan_int
{
        public static void main(String[]args)
        {
                int a=5;
                int a1=Integer.MAX_VALUE;
                int a2=2;
         

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

7 个回复

倒序浏览
这是二进制补码的相关内容,java整形是32位,从32个0,到32个1这是整形的范围,首位0表示正数,1表示复数。所以最大值就是0111 1111 1111 1111 1111 1111 1111 1111,如果加1,就变成了1000 0000 0000 0000 0000 0000 0000 0000 这一下就天堂到地狱,这个是最小值了(这里有负数的补码运算,不是直接二进制加出来的)。-2^31.你继续加1那么就是-2^31+1,这是二进制运算的原理,你加过头了就会溢出,如果你变成long,那么就用最高位去补。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
因为Integer.MAX_VALUE;是代表java int型的最大值 而最大值加1会变成最小值Integer.MAX_VALUE;=2147483648
int a1=Integer.MAX_VALUE;
                int a2=2;
                a=a1+a2;
而你这个是把a1、a2赋值给a了 所以就变成最大值加2了 所以就成了-2147483647

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
huima 发表于 2013-4-11 19:23
这是二进制补码的相关内容,java整形是32位,从32个0,到32个1这是整形的范围,首位0表示正数,1表示复数。 ...

嗯,表示自己粗心把数学演算整错了,整数的补码不变,负数的补码符号位不变,其余取反加1。对于上边计算还是用二进制进行加减,只不过是计算机中是使用补码的形式在运算,那么就要从补码转换到原码来。1000-0000  0000-0000 0000-0000  0000-0001(补码)对于这个结果,明白其实是负数,因为符号位为1,其为补码形式,要转换成原码。就要原道返回,减1,其它位除了符号位取反,即为1111-1111  1111-1111  1111-1111  1111-1111(原码)=-2147483647
回复 使用道具 举报
恩恩,哥们,你理解就好,希望我们之间互利共赢哈!!!
回复 使用道具 举报
王小五-fight 发表于 2013-4-11 19:43
嗯,表示自己粗心把数学演算整错了,整数的补码不变,负数的补码符号位不变,其余取反加1。对于上边计算 ...

恩恩,哥们,你理解就好,希望我们之间互利共赢哈!!!
回复 使用道具 举报
huima 发表于 2013-4-11 19:56
恩恩,哥们,你理解就好,希望我们之间互利共赢哈!!!

那是必须的,共同进步啊。我起点比较低,多指教。
回复 使用道具 举报
huima 中级黑马 2013-4-12 09:45:58
8#
王小五-fight 发表于 2013-4-12 07:49
那是必须的,共同进步啊。我起点比较低,多指教。

恩恩,共同努力!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马