負數除法


今天無意想到除法,突然覺得自己對負數及負數的除法的意義並不清楚,
首先要明白負數中“負號”的意義,”負號”的意義在於“方向”。例如 我們定義 “給我”為+;“給你”為-。
那么下列除法用語言描述就是:
12/3=4,:給我12個蘋果(+12),每次給我3個(+3),需要4次;
12/4=3:給我12個蘋果(+12),分4次給,每次給我3個(+3);
13/3=4...1:給我13個蘋果(+13),每次給我3個(+3),需要4次,還得再給我一個(+1);
 
-12/-3=4:給你12個蘋果(-12),每次給你3個(-3),需要4次;
-12/4=-3:給你12個蘋果(-12),分4次給,每次給你3個(-3);
-13/-3=4...-1:給你13個蘋果(-13),每次給你3個(-3),需要4次,還得再給你一個(-1)。
 
12/-4=-3:給我12個蘋果(+12),每次給你4個(-4),需要給我3次(-3)。
上面正數除以負數的解釋,感覺有點別扭!
 
在理解了“負號”作為“方向”的意義后,理解“負數”及其應用就容易多了。
-3 / 2 = -1;  -3 % 2 = -1;
     3 / (-2) = -1;  3 % (-2) = 1;
  
  余數的正負和被除數保持一致
不過聽說 在數學中余數一定是正的
—————————————————————————————更新——————————————————————————————
今天才知道取模和取余是不一樣的

取模

5 mod 3 = 2 
-5 mod 3 = 1
5 mod -3 = -1
-5 mod -3 = -2
取余

5 rem 3 = 2 
-5 rem 3 = -2
5 rem -3 = 2
-5 rem -3 = -2

1.取余
rem(3,2)=1
rem(-3,-2)=-1
rem(3,-2)=1
rem(-3,2)=-12.

取模
mod(3,2)=1
mod(-3,-2)=-1
mod(3,-2)=-1
mod(-3,2)=1
由此可以看出,rem和mod是有符號區別的!
當除數與被除數的符號相同時,rem和mod的結果是完全相同的;當除數與被除數的符號不相同時,結果不同。
具體說,rem結果的符號與被除數相同;mod結果的符號與除數相同。


經過測試,在C/C++, C#, JAVA, PHP這幾門主流語言中,’%’運算符都是做取余運算,而在python中的’%’是做取模運算。

此外,余數在數學中的定義是始終大於等於0的,而對於某些編程語言的取余運算不是按照上面的定義來執行的,因此才會出現余數小於0的情況。


取余 

m%n

取模

(m%n+n)%n

其實取模和取余在目標上是一致的,但是因為語言對取余和取模上定義的不同,導致得到的結果不同。

對取余和取模定義不同的語言中,兩者的不同點只有一個

取余運算在計算商值向0方向舍棄小數位
取模運算在計算商值向負無窮方向舍棄小數位

同時,也可以這樣理解:

取余,遵循盡可能讓商大的原則
取模,遵循盡可能讓商小的原則

經過測試,在C/C++, C#, JAVA, PHP這幾門主流語言中,’%’運算符都是做取余運算,而在python中的’%’是做取模運算。

此外,余數在數學中的定義是始終大於等於0的,而對於某些編程語言的取余運算不是按照上面的定義來執行的,因此才會出現余數小於0的情況。

說了這么多,我們在使用取模(取余)運算時要注意的地方有一個,當除數和被除數出現異號的情況時,程序移植的時候要特別小心,因為不同語言對取模和取余的定義可能是不同的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM