尝试使用此代码将数字字符串转换为二进制

public static int convert(String text)
{
    int num =0;
        for(int i =0; i<text.length();i++)
        {
            if(((int)text.charAt(i)>=48)&&((int)text.charAt(i)<=59))
            {
                System.out.println("Before: i = " + i + " num = "+ num+" char = "+ text.charAt(i) + "numchar = " + ((int)text.charAt(i)-48));
                num = num*10 + ((int)text.charAt(i)-48);
                System.out.println("After: i = " + i + " num = "+ num+" char = "+ text.charAt(i) + "numchar = " + ((int)text.charAt(i)-48));
            }

        }
        return num;
    }
}


但是,一旦它达到第10个数字,即使我的测试字符串是二进制的,输出也会变成带有负数和随机数的完整杂物。知道为什么会这样吗?

最佳答案

Java中的int数据类型是32位有符号整数,因此它可以表示的最大值为2 ^ 31-1 =2147483647。由于您尝试解析大于此的数字,因此算术将导致integer overflow

要解决此问题,您将需要使用可以表示较大整数的数据类型,例如long(最多约19位数字)或BigInteger(任意大)。

08-18 02:18
查看更多