Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.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 x mod-3给出了返回的正数_Java_Modulo - Fatal编程技术网

Java x mod-3给出了返回的正数

Java x mod-3给出了返回的正数,java,modulo,Java,Modulo,我想从Java中的xmod-3中得到负数。 e、 例:1模-3=-2或2模-3=-1 有解决这个问题的方法吗?X mod-Y如您所定义,可以通过求解-X mod Y然后否定答案来计算 public static int negativeMod(int x, int y) { if (y > 0) return x % y; int newAnswer = (-1 * x) % (-1 * y); if (newAnswer != 0) newAnswer -= y;

我想从Java中的xmod-3中得到负数。 e、 例:1模-3=-2或2模-3=-1


有解决这个问题的方法吗?

X mod-Y
如您所定义,可以通过求解
-X mod Y
然后否定答案来计算

public static int negativeMod(int x, int y) {
   if (y > 0) return x % y;

   int newAnswer = (-1 * x) % (-1 * y);
   if (newAnswer != 0) newAnswer -= y;

   return -1 * newAnswer;
}
示例:
1模-3
->
-1模3=2
->
-2

特别是在Java中,执行
-X%Y
,然后添加
Y
,如果非零,则否定答案

public static int negativeMod(int x, int y) {
   if (y > 0) return x % y;

   int newAnswer = (-1 * x) % (-1 * y);
   if (newAnswer != 0) newAnswer -= y;

   return -1 * newAnswer;
}

Java中的
%
运算符不是模运算符,而是余数。(它们不是一回事)这就解释了你得到的不同信号。从当前,部分:

据说二进制%运算符从隐含除法中产生其操作数的剩余部分;左手操作数是被除数,右手操作数是除数

<>在C和C++中,余数运算符只接受积分操作数,但在java编程语言中,它也接受浮点操作数。 二进制数字提升(§5.6.2)后的整数操作数的余数运算产生一个结果值,使得(a/b)*b+(a%b)等于a

即使在特殊情况下,这个恒等式仍然成立,即被除数是其类型的最大可能大小的负整数,除数为-1(余数为0)

根据这条规则,余数运算的结果只能在红利为负时为负,并且只能在红利为正时为正。此外,结果的大小总是小于除数的大小


那很容易。如果余数不是0,则减去模数。对于示例1 mod-3,1-3是-2,这是您想要的答案。这是数学恒等式a==a-n(mod n)的一个简单结果。

这种方法的问题是,根据Java,
negative%positive=negative
如果模结果为零,就不应该加y。“我想要负数…”--OP=>那么是的,即使对于零也应该加y。向上投票。@JanDvorak我第一次真的认为你是对的,并编辑了我的帖子以反映这一点。让我们说如果OP想要一个否定的答案,那么他应该删除这个条件;-)