Java 余数运算符给出负结果
我对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
(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强制转换的优先级高于大多数其他运算符。当您看到()
时,请考虑高优先级。