Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 余数运算符给出负结果_Java - Fatal编程技术网

Java 余数运算符给出负结果

Java 余数运算符给出负结果,java,Java,我对java中的余数运算符有一个问题: 为什么会这样: (int)2147483648l % 10 给出一个负数(-8)?这是因为(int)2147483648l是-2147483648。您正在将long强制转换为int,超出了范围。强制转换问题。由于缩小,数据丢失。您正在将long转换为int 阅读更多有关的信息。来自 二进制数字提升(§5.6.2)后的整数操作数的余数运算产生一个结果值,使得(a/b)*b+(a%b)等于a 从缩小原语转换开始 因此2147483648l将转换为int,该i

我对java中的余数运算符有一个问题: 为什么会这样:

(int)2147483648l % 10

给出一个负数(-8)?

这是因为
(int)2147483648l
-2147483648
。您正在将
long
强制转换为
int
,超出了范围。

强制转换问题。由于缩小,数据丢失。您正在将long转换为int

阅读更多有关的信息。

来自

二进制数字提升(§5.6.2)后的整数操作数的余数运算产生一个结果值,使得
(a/b)*b+(a%b)
等于
a

从缩小原语转换开始
因此
2147483648l
将转换为int,该int将是
-2147483648
,然后基于
(a/b)*b+(a%b)=a

值应该是您得到的值
-8

用“long”代替“int”。
您也可以在不进行类型转换的情况下使用它

以下示例可能很有用:

public class Example1
{
    public static void main(String args[])
    {
        int b = (int)2147483648l;
        System.out.println("Value of b: "+ b);
        System.out.println("Output1:  "+b % 10);

        long a = 2147483648l;
        System.out.println("Value of a: "+ a);
        System.out.println("Output2: "+ a % 10);
    }
}
输出

Value of b: -2147483648
Output1:  -8
Value of a: 2147483648
Output2: 8

您得到的是负数,因为您正在将
long
转换为
int
。在您的案例中,一个可能的解决方法就是利用以下事实:任何十进制x mod 10都只是小数点后最低位(1位)的数字。例如,156模10是6,因为156除以10等于15+(6/10)。所以你可以这样做

//get the number and make it a string
String numberAsString = String.valueOf(number);

//get the integer value of the last character in the string (basically the lowest place)
int mod10 = Integer.parseInt(numberAsString.charAt(numberAsString.length() - 1));

这适用于任何整数
数字
,只要您想要的是
数字%10

(int)
是“to int”强制转换运算符。现在我发现了问题所在。最初我想将结果强制转换为int,但我应该这样做:(int)(2147483648l%10)。当前示例仅将左操作数强制转换为int,而不是结果。@dhblah强制转换的优先级高于大多数其他运算符。当您看到
()
时,请考虑高优先级。