`
chenhsong
  • 浏览: 43959 次
  • 性别: Icon_minigender_1
  • 来自: 洛阳
社区版块
存档分类
最新评论

类C语言与Python负数除法求值间的差异

阅读更多

一直用Python做计算器用(有点大材小用了啊,呵呵)。今天使用时,却发现一个诡异的现象,在C语言入门经典(第4版)说正负数除数取余操作的差别,就在Python上试验了一下,结果结成了完全不一样。下面列出三种语言做同样运算的差别(外加上Java)。
Java:

Java代码  收藏代码
  1. import  java.lang.*;  
  2. public   class  divmod  
  3. {  
  4.     public   static   void  main(String[] args)  
  5.     {  
  6.         System.out.println("45/-7=" +( 45 /- 7 ));  
  7.         System.out.println("45%-7=" +( 45 %- 7 ));  
  8.         System.out.println("-45/7=" +(- 45 / 7 ));  
  9.         System.out.println("-45%7=" +(- 45 % 7 ));  
  10.     }  
  11. }  

 

结果是:
C:\Documents and Settings\g1309288>cd /d D:\javapro

D:\JavaPro>javac divmod.java

D:\JavaPro>java divmod
45/-7=-6
45%-7=3
-45/7=-6
-45%7=-3

C:

C代码  收藏代码
  1. #include <stdio.h>   
  2. main()  
  3. {  
  4.     printf("45/-7=%2d\n" ,45/-7);  
  5.     printf("45%%-7=%2d\n" ,45%-7);  
  6.     printf("-45/7=%2d\n" ,-45/7);  
  7.     printf("-45%%7=%2d\n" ,-45%7);  
  8.   
  9. }  

 

结果是:
45/-7=-6
45%-7= 3
-45/7=-6
-45%7=-3

 

Python:

Python代码  收藏代码
  1. print ( "45/-7=" , 45 /- 7 );  
  2. print ( "divmod(45,-7)=" ,divmod( 45 ,- 7 ));  
  3. print ( "45%-7=" , 45 %- 7 );  
  4. print ( "-45/7=" ,- 45 / 7 );  
  5. print ( "divmod(-45,7)=" ,divmod(- 45 , 7 ));  
  6. print ( "-45%7=" ,- 45 % 7 );  

 

结果是:
C:\Documents and Settings\g1309288\桌面>divmod.py
45/-7= -6.428571428571429
divmod(45,-7)= (-7, -4)
45%-7= -4
-45/7= -6.428571428571429
divmod(-45,7)= (-7, 4)
-45%7= 4

可以看到当有负数存在时,C语言和Python运算的结果是不一样的。C语言不管正负,结果的绝对值是相等的,而Python却不一样。
基于上面的结果,有一个假设,Python取余运算所取的商数是不大于实际商的最大整数。即divmod(-45,7)==(math.floor(-45/7),-45%7)。

1
0
分享到:
评论

相关推荐

    表达式求值,加减乘除混合运算

    在实际编程实现中,可以使用各种编程语言(如C++、Java、Python等)来编写表达式求值器,关键在于理解和正确实现上述算法。同时,为了处理浮点数和错误检查,可能还需要额外的逻辑。这个过程不仅锻炼了对数据结构和...

    python训练营python学习笔记(csdn)————程序.pdf

    至于是否需要学习C语言,这取决于你的目标,Python与C语言在底层机制上有联系,但Python作为高级语言,可以直接使用,无需先学C。 6. **学习思考与总结** 计算机科学的核心是逻辑,Python的学习需要理解这些逻辑...

    Python 2.5

    最后,Python的可移植度非常高:它可以在许多的Unix类平台上运行,在Mac,MS-DOS,视窗Windows,Windows NT,OS/2,BeOS,以至RISCOS上都有相关的Python版本。 &lt;br/&gt; &lt;br/&gt;Python核心网站是: ...

    c语言基础教程.pdf

    // 除法运算 int remainder = b % a; // 取模运算 ``` ### 控制结构 #### 条件语句 条件语句用于根据条件的真假来决定执行哪一段代码。主要形式包括`if`、`else`、`if-else`、`switch`等。 示例: ```c int num...

    试题python基础试题(含答案)练习.pdf

    15. 输出结果为0,可能是整数除法,空白处应为B `a//b`。 16. 字符串`a="python"`,切片`a[1:3]`将获取第二个和第三个字符,即`'py'`。 17. 可以作为Python变量名的有字母、数字和下划线组成,且不能以数字开头,...

    python数学模块 (2).pdf

    2. **模运算与除法**: - `math.fmod(x, y)`:返回`fmod(x, y)`的结果,其定义与平台C库相同。C标准规定`fmod(x, y)`应等于`x - n * y`,其中`n`是一个整数,使得结果与`x`具有相同的符号且绝对值小于`y`的绝对值。...

    求余与取模的区别

    4. **特殊情况**:在Python中,可以使用`a // b`进行地板除法,得到的余数与`a % b`相同,但`a // b`的结果是整数,这在处理负数时与求余运算的行为一致。 为了更好地理解这些概念,我们可以看一些例子: - 当a = ...

    设计算法把一个十进制整数转换为二至九进制之间的任意进制数输出

    3. **反转**:将余数从最后一次除法到第一次除法的结果顺序反转,这样就得到了目标进制下的数字表示。 以下是用Python代码实现这个算法的一种方式: ```python def decimal_to_n_base(decimal_num, base): if not...

    PyPI 官网下载 | gmpy2-2.1.1-cp36-cp36m-musllinux_1_1_x86_64.whl

    1. **大整数运算**:gmpy2支持任意大小的整数,无论是正数、负数还是零,可以进行加法、减法、乘法、除法、幂运算等操作。 2. **浮点数处理**:除了整数运算,gmpy2还提供了浮点数的支持,允许进行高精度的浮点数...

    长整型四则运算 长整型

    2. **精度损失**:在进行除法运算时,尤其是浮点数与长整型混合运算时,可能会出现精度损失。虽然长整型保证了整数部分的精确性,但小数部分会被截断或四舍五入,这可能导致结果的不精确。 3. **运算效率**:长整型...

    听说你也要自学python,看这就够了(一)

    而除法运算与其他语言略有不同,如`1 / 2`会得到0.5,而不是像C语言那样丢失小数部分。在Python中,如果你想得到整除的结果,可以使用双斜杠`//`,如`1 // 2`会得到0。此外,还可以进行求余运算,`1 % 2`的结果是1,...

    GTK+glade3设计的计算器(适用于linux、win)

    1. 基本运算:加法、减法、乘法、除法。 2. 操作符优先级处理:正确处理括号内的计算以及乘除先于加减的规则。 3. 连续运算:用户可以连续输入多个操作,如2+3*4。 4. 清零(C键):清除当前输入的数字或整个表达式...

    Numpy数组和矩阵运算(2.数组运算)

    - `result_div`给出了两个数组的逐元素除法。 - `result_neg_a`和`result_neg_b`分别表示取负以及一个复杂的表达式运算。 ##### 2. 矩阵乘法 ```python c = b.reshape(3,2) # 使用 @ 或 .dot() 方法进行矩阵乘法 ...

    2021-2022计算机二级等级考试试题及答案No.18058.docx

    6. 关系表操作:关系代数中的交、并、笛卡尔积和除法操作。T=R×S表示T是R和S的笛卡尔积,所以C选项正确。 7. Word表格:Word中的表格由单元格组成,这是基本的文档编辑知识。 8. 系统变量命名:系统变量通常以下...

    计算机实现

    计算机在处理浮点数运算时,如科学计算中常见的乘法和除法,会使用更为复杂的算法。浮点数表示包括指数和尾数两部分,这使得它们能够表示很大或很小的数值。浮点运算单元(FPU)专门设计用来处理这类运算,遵循国际...

    2021-2022计算机二级等级考试试题及答案No.283.docx

    4. 表达式7\9的结果是0,因为整数除法(\)会去掉小数部分。 5. OSI参考模型的最低层是物理层,负责数据的物理传输。 6. 一台主机确实可以有多个IP地址,例如在多网络接口或虚拟主机环境下。 7. C语言中的宏定义...

    C++习题frefsefsefse.pdf

    4. `201 / 4.0` 的值为 `50.25`(浮点除法)。 ### 变量的值 1. `a = 30;` 2. `b = a++;` 执行后 `a` 的值为 `31`,`b` 的值为 `30`。 3. `c = ++a;` 执行后 `a` 的值为 `32`,`c` 的值为 `32`。 ### for循环的...

    第十届蓝桥杯选择题真题解析1-8.docx

    蓝桥杯是一项面向全国的软件和信息技术专业人才的重要赛事,涵盖了C语言、Python、嵌入式等多个技术领域。其目的在于选拔优秀的软件开发人才,促进软件行业的技术创新与发展。本文将针对第十届蓝桥杯中的部分选择题...

    2021-2022计算机二级等级考试试题及答案No.1622.docx

    18. 方法返回类型:给定方法的返回类型是将double类型的除法运算结果强制转换为short类型,可能会导致溢出,因此实际返回类型应该是D.double。 19. MySQL命令行客户端:MySQL命令行客户端的提示符通常是D.mysql &gt;。...

    2021-2022计算机二级等级考试试题及答案No.19531.docx

    在给定的代码中,由于`k+m`的结果大于3,所以`S(k+m)`会溢出并得到一个负数,导致除法结果为0,因此`a`最终被赋值为0。因此,输出结果是0。 8. 面向对象设计方法的基本原理是使用现实世界的概念抽象地思考问题,...

Global site tag (gtag.js) - Google Analytics