Turbo Pascal对mod的解释是这样的:
A Mod B=A-(A div B) * B (div含义为整除)
这个定义本身很清晰,问题出在对于整除的理解上。在C/C++语言里,整除都是像0靠拢:这里的逻辑是,比如1 / 2 = 0.5,为了增加机器执行的效率,最
好的方式就是直接把小数部分去掉,得到0。这在1 / -2的时候显得不是很合适,因为仍旧偷懒把小数部分去掉,得到0。而mod运算在C/C++里面也是严格按照
上述公式执行的1 % -2 = 1
接触python之后发现,python语言里,整除都是向负无穷靠拢,这更符合数学上的定义。于是 1 / - 2 = -1, 1 % -2 = -1。python里把这种处理办法叫做所谓的
floor divide,很生动。后续的python更新中将不再采用这种方式,而是使用真正的除法,有需要时直接得到浮点的结果。地板除以//运算符的方式呈现。
时间: 2024-10-06 00:08:27