1. 模運算的計算原理是這樣的:
假設想求的a = x%y,a的值是透過如下公式算出來的:
a = x - (x/y)*y,且除法是按照整數除法來運算的
所以將你的數字代入公式:
-17%10 = -17 - (-17/10)*10 = -17 - (-2)*10 = 3.
產生這個結果的關鍵在於程式的取模公式,保證了
y是正數,模運算的結果就是[0,y),
y是負數,模運算的結果就是(y,0]
2. 通常人們希望整除的商和餘數會有這樣的特性:
1. 被除數 = 除數*商 + 餘數
2. 被除數符號變化,商的符號也變化,而絕對值不變
3. 餘數的符號和除數相同
但實際上這 3 條不能總是符合的,第 1 條是肯定要符合的。
舉例來說,3/2 為 1,3%2 為 1,如果要符合第 2 條,那就是 -3/2 為 -1,-3%2 為 -1,它是不符合第 3 條的;而如果要符合第 3 條,則是 -3%2 為 1,-3/2 為 -2,它是不符合第二條的。
所以一般程式語言會在第 2 或者 第 3 條中選擇一條,python 選擇的就是滿足第 3 條的方式。很多其它的語言選擇的是第 2 條。所以在 python 中,-17%10 為 3,而 -17/10 為 -2
注,在 python 3 中 / 表示除法,不表示整除,所以 -17/10 在 python 3 中為 -1.7,兩個 / 才表示整除: -17//10 為 -2
1. 模運算的計算原理是這樣的:
假設想求的a = x%y,a的值是透過如下公式算出來的:
a = x - (x/y)*y,且除法是按照整數除法來運算的
所以將你的數字代入公式:
-17%10 = -17 - (-17/10)*10 = -17 - (-2)*10 = 3.
產生這個結果的關鍵在於程式的取模公式,保證了
y是正數,模運算的結果就是[0,y),
y是負數,模運算的結果就是(y,0]
2. 通常人們希望整除的商和餘數會有這樣的特性:
1. 被除數 = 除數*商 + 餘數
2. 被除數符號變化,商的符號也變化,而絕對值不變
3. 餘數的符號和除數相同
但實際上這 3 條不能總是符合的,第 1 條是肯定要符合的。
舉例來說,3/2 為 1,3%2 為 1,如果要符合第 2 條,那就是 -3/2 為 -1,-3%2 為 -1,它是不符合第 3 條的;而如果要符合第 3 條,則是 -3%2 為 1,-3/2 為 -2,它是不符合第二條的。
所以一般程式語言會在第 2 或者 第 3 條中選擇一條,python 選擇的就是滿足第 3 條的方式。很多其它的語言選擇的是第 2 條。所以在 python 中,-17%10 為 3,而 -17/10 為 -2
注,在 python 3 中 / 表示除法,不表示整除,所以 -17/10 在 python 3 中為 -1.7,兩個 / 才表示整除: -17//10 為 -2