学习Python看到数值运算这部分,看到取模运算,原来不仅正数负数都可以取模,浮点数,甚至复数都可以取模:

对于x%y,

如果都是整数,则返回x/y的余数;

如果是浮点数,返回的是x - int(x/y)*y ;

如果是复数,返回的是x - int((x/y).real)*y。

不过以上这些公式貌似都只是对于操作数都是正数的情况下才满足。。。

对于负数参与取模运算,不同的语言有不同的规定:

C/Java语言除法采用的是趋零截尾,一个规律是,取模运算的结果的符号与第一个操作数的符号相同(或为0)。

C++语言的截尾方式取决于特定的机器。

Python语言除法采用的是趋负无穷截尾,即floor除法。规律是,取模运算的结果的符号与第二个操作数的符号相同。

综上,可以总结为:

C语言和Java中,取模运算只能是整数,先不管正负,算出结果,然后添加正负号使结果和第一个操作数同符号即可。

Python中,取模运算还可以是浮点数和复数;

对于两个操作数同符号的情况,直接取余数或按照公式算;

对于两个操作数异号的情况,可以先不管符号,取余数或根据公式算出结果,如果结果是0则无需继续操作,如果不是0,则还须将结果取第二个操作数的补。(例如5%-4,先算出结果为1,不为0,则1取4的补为3,得到结果为3——还有最后一步,保证结果的符号和第二个操作数的符号相同!所以,5%-4的结果为-3。)

可以这样理解Python的取模运算:首先,规定结果和第二个操作数同号,其次x%y,如果y为正数,假设为y=4,则表示数轴对应关系为:

...   3   0   1   2   3  0  1  2  3 0  1 ...

... -5  -4  -3  -2  -1  0  1  2  3  4  5 ...

如果y为负数,假设y=-4,则表示数轴对应的关系为:

...   1   0  3   2   1  0  3  2  1  0  3 ...

... -5  -4  -3  -2  -1  0  1  2  3  4  5 ...

那么对于C语言的取模运算,就可以这样理解了:首先,规定结果和第一个操作数同号,其次,不管正负,仍以5%4或者5%-4为例,数轴对应关系为:

...   1   0   3   2   1  0  1  2  3  0  1...

... -5  -4  -3  -2  -1  0  1  2  3  4  5 ...

o(╯□╰)o,搞得有点复杂了。。。最后,贴一个Python下的运算截图吧:

因此,在不确定具体实现的情况下,保险的做法还是自己先把操作数转换为正数,再根据需要调整。。。

本文出自夜惊心的博客,转载请保留出处

blog comments powered by Disqus

java求负数取模_负数参与取模运算相关推荐

  1. java 负数存储结构_负数在java中的存储和读取过程 | 学步园

    问题描述: 将-5存储在文本文件中,再读取出来显示到控制台; 预备知识: 1.在java中使用补码处理数字,而且byte(8)的数字在扩展成int(32)类型的时候,正数填充0,负数填充1; 2.负数 ...

  2. python中如何取余_基于python 取余问题(%)详解

    取余的公式: 余数=除数-被除数*商 python的的余数是按照整除(向下取整)得到的商来计算的. 取余问题主要分为 : 正数与正数,负数与负数,正数与负数 ,0 正数与正数 #大数/小数:因为得出的 ...

  3. linux 从github拉取更新_关于拉取请求

    注:在处理拉取请求时,请记住: 如果操作的是共享仓库型号,建议对拉取请求使用主题分支. 从任何分支或提交都可发送拉取请求,但如果需要更新提议的更改,则可使用主题分支推送跟进提交. 在推送提交到拉取请求 ...

  4. python爬取晋江_爬虫爬取晋江文学网总分榜(失败)

    一.目的 : 爬取晋江文学网总分榜 二.python爬取数据 三.爬取 在开始多出现了38号而且顺序内容不准确 代码: import requests from bs4 import Beautifu ...

  5. python爬取晋江_爬虫爬取晋江文学网总分榜

    一.目的 : 爬取晋江文学网总分榜 二.python爬取数据 三.爬取 在开始多出现了38号而且顺序内容不准确 代码: import requests from bs4 import Beautifu ...

  6. python负数取模_负数的取模运算

    我们知道,在不同的语言中,对负数执行取模运算,结果有可能会是不同的.例如,(-11)%5在python中计算的结果是4,而在C(C99)中计算的结果则是-1. truncate除法 && ...

  7. java负数转换为二进制_负数与二进制换转方法

    1.十进制负数转二进制 假设有一个 int 类型的数,值为5,那么,我们知道它在计算机中表示为: (因为java中int 是4个字节,所以高位需要补0,占够32位) 00000000 00000000 ...

  8. c语言位运算负数的实例_负数位运算的右移操作-C语言基础

    这一篇探讨的是"负数位运算的右移操作",涉及到数据的源码.反码.补码的转换操作.属于C语言基础篇. 先看例子 #include int main(void) { //正数的位右移 ...

  9. c++ 负数比较大小_负数的定义(二)

    上期我们发现小学教材是通过"相反意义的量"引入负数,初中教材普遍是怎么样引入的负数我们来看看(看下图). 初中同样是从"相反意义的量"引入负数,有温度.增长率. ...

最新文章

  1. 开源中国 Maven 库
  2. TiDB 源码阅读系列文章(十九)tikv-client(下)
  3. Android Q Labs| 结束演讲
  4. MSM8909平台 LED背光的控制
  5. Kotlin on Android 开发环境介绍
  6. highcharts总结
  7. 探寻浏览器渲染的秘密
  8. jsf集成spring_Spring和JSF集成:分页
  9. 可变参数(不定项参数)
  10. 大整数的因子(信息学奥赛一本通-T1171)
  11. oracle范围分区表,Oracle表分区之范围分区-Oracle
  12. OSG 实现跟随节点的相机(转)
  13. android 简历 android 3年 上海.doc
  14. iPhoneSE3定价或跌穿3K,苹果不给安卓手机活路了?
  15. 使用 IDEA 的阿里插件扫描出的问题的级别
  16. c语言中常用运算符号
  17. 封装系统时删除pagefile.sys及hiberfil.sys文件
  18. [Python数据分析]NBA的球星们喜欢在哪个位置出手
  19. 虚拟服务器的真实ip,虚拟ip和真实ip区别(图文)
  20. [玩转北京] 北京最值得你一看的博物馆大全

热门文章

  1. 步进电机驱动数控十字滑台直线、圆弧插补(附斜椭圆插补代码实现)
  2. 0-6岁是专注力发展的最佳时期,根据不同年龄培养娃的专注力!
  3. macbook 使用技巧
  4. cortex-m3 R14(LR)寄存器的作用
  5. Anaconda安装swampy程序包
  6. 作为一个男人,尤其作为一个真正的爷们,应该做好下列小事 - ♀coolszy♂ 【厚德载物 天道酬勤】 - JavaEye技术网站
  7. java程序设计教程_第6章_第6章 习题答案
  8. java程序设计教程实验报告_java程序设计课程实验报告3
  9. 智能武器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  10. php pc机微信扫码,ThinkPHP 微信登陆 (微信PC扫码授权登陆) php 最简单代码