我在java中的余数运算符有问题: 为什么:
(int)2147483648l % 10
给出一个负数(-8)?
答案 0 :(得分:13)
那是因为(int) 2147483648l
是-2147483648
。您正在将long
转换为int
并且它已超出范围。
答案 1 :(得分:0)
投射问题。由于缩小导致数据丢失。您将long转换为int。
详细了解conversion。
答案 2 :(得分:0)
来自JLS
二进制数字提升(第5.6.2节)后整数操作数的余数运算产生的结果值使
(a/b)*b+(a%b)
等于a
。
来自缩小原始转换JLS 5.1.3
因此,2147483648l
将转换为-2147483648
的int,然后基于(a/b)*b+(a%b) = a
价值应该是-8
你得到的。
答案 3 :(得分:0)
使用“long”代替“int”。 你也可以使用它而无需进行类型转换
答案 4 :(得分:0)
以下示例可能有用:
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
答案 5 :(得分:0)
您收到一个负数,因为您正在将long
转换为int
。在你的情况下可能的解决方法只是利用这样的事实,即任何十进制x mod 10只是最小小数位(在一个地方)的数字。例如,156 mod 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));
只要你想要的是number
number % 10