相关疑难解决方法(0)

Python中负数的模运算

我在Python中发现了一些关于负数的奇怪行为:

>>> -5 % 4
3
Run Code Online (Sandbox Code Playgroud)

谁能解释一下发生了什么?

python modulo negative-number

64
推荐指数
6
解决办法
5万
查看次数

C和Python - 模数(%)操作的不同行为

我发现相同的mod操作会产生不同的结果,具体取决于使用的语言.

在Python中:

-1 % 10
Run Code Online (Sandbox Code Playgroud)

产生9

在C中它产生-1!

  1. 哪一个是正确的模数?
  2. 如何使C中的mod操作与Python中的相同?

c python math modulo

63
推荐指数
5
解决办法
2万
查看次数

为什么operator%被称为"模数"运算符而不是"余数"运算符?

今天上班时我与我的一位同事进行了一次有趣的讨论.当他遇到以下情况时,他感到很惊讶:

assert(-1 % 10 == -1)  //Expecting 9
Run Code Online (Sandbox Code Playgroud)

因此,当他来问我这件事,我告诉他,"好了,这是有道理的.当你把-1 10,你跟-1剩余得到0.然而,他的论点是,模运算应该秉承"总是积极的"模型.我做了一点研究,发现他所指的模数看起来像这样:

设q是a和n的整数商.设r为余数.然后:

a = n*q + r

然而,使用的定义似乎是模数的Knuth版本,它是:

设q是除以n的底数.设r为余数.然后:

r = a - n*q

所以,我的问题是为什么它最终在FORTRAN标准(以及随后的C标准)中使模数运算符截断为0?把它称为"模数"而不是"余数"似乎是一种误称(在数学中,答案应该是9).这与硬件如何进行划分有关吗?

以供参考:

TLDR; 硬件是模数运算符向0截断的原因吗?

c++ standards operators modulus

22
推荐指数
2
解决办法
6005
查看次数

标签 统计

modulo ×2

python ×2

c ×1

c++ ×1

math ×1

modulus ×1

negative-number ×1

operators ×1

standards ×1