相关疑难解决方法(0)

负数的Mod正在融化我的大脑

我试图修改一个整数来获得一个数组位置,以便它循环.i % arrayLength对于正数而言做得很好,但对于负数而言,这一切都是错误的.

 4 % 3 == 1
 3 % 3 == 0
 2 % 3 == 2
 1 % 3 == 1
 0 % 3 == 0
-1 % 3 == -1
-2 % 3 == -2
-3 % 3 == 0
-4 % 3 == -1
Run Code Online (Sandbox Code Playgroud)

所以我需要一个实现

int GetArrayIndex(int i, int arrayLength)
Run Code Online (Sandbox Code Playgroud)

这样的

GetArrayIndex( 4, 3) == 1
GetArrayIndex( 3, 3) == 0
GetArrayIndex( 2, 3) == 2
GetArrayIndex( 1, 3) == 1
GetArrayIndex( 0, 3) …
Run Code Online (Sandbox Code Playgroud)

c# math modulo

175
推荐指数
8
解决办法
9万
查看次数

如何整数除数圆负数*向下*?

似乎每当我将负int除以正int时,我需要它向下舍入(朝向-inf),而不是朝向0.但是C#和C++都向0舍入.

所以我想我需要一个DivideDownward()方法.我可以用几行来写一个负面的测试,依此类推,但我的想法看起来很糟糕.所以我想知道我是否遗漏了一些东西,如果你有一种"优雅"的方式将负分区向下舍入.

c# c++

20
推荐指数
6
解决办法
8493
查看次数

Python与Java中的模数实现之间的差异

我注意到Python和Java中模数运算符的不同实现.

例如,在Python中:

>>> print -300 % 800
>>> 500
Run Code Online (Sandbox Code Playgroud)

在Java中:

System.out.println(-300 % 800);
-300
Run Code Online (Sandbox Code Playgroud)

这让我措手不及,因为我认为像模数一样基本的东西被普遍解释为同样的方式.我喜欢Python的解释(我认为它是从C借用的),尽管我看到了Java实现背后的逻辑.

你通常更喜欢哪一个?有不同解释的具体原因吗?我无意开始语言大战,只是好奇.

python java modulo

14
推荐指数
1
解决办法
5009
查看次数

c ++ 11中的运算符模数变化?

可能重复:
C++运算符%保证

在c ++ 98/03中

5.6-4

二元/运算符产生商,二元%运算符从第一个表达式除以第二个表达式得到余数.如果/或%的第二个操作数为零,则行为未定义; 否则(a/b)*b + a%b等于a.如果两个操作数都是非负的,那么余数是非负的; 如果没有,余数的符号是​​实现定义的.

在c ++ 11中:

5.6 -4

二元/运算符产生商,二元%运算符从第一个表达式除以第二个表达式得到余数.如果/或%的第二个操作数为零,则行为未定义.对于积分操作数,/运算符产生代数商,丢弃任何小数部分;如果商a/b在结果类型中可表示,则为(a/b)*b + a%b等于a.

正如您所看到的那样,为符号位定义的实现缺失了,它会发生什么?

c++ modulo language-lawyer c++11 c++03

11
推荐指数
1
解决办法
4472
查看次数

标签 统计

modulo ×3

c# ×2

c++ ×2

c++03 ×1

c++11 ×1

java ×1

language-lawyer ×1

math ×1

python ×1