类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)。

你可能感兴趣的:(C++,c,python,C#,D语言)