Java x mod-3给出了返回的正数
我想从Java中的xmod-3中得到负数。 e、 例:1模-3=-2或2模-3=-1Java 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;
有解决这个问题的方法吗?
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想要一个否定的答案,那么他应该删除这个条件;-)