如何在計算器-1 mod 26 = 25,但在C或Java -1 % 26 == -1
。我需要一個像計算器一樣解決它的程序。兩者有什麼不同?爲什麼Java的%操作符會給我的計算器帶來不同的結果,導致負派息?
回答
兩個答案(25和-1)都是有效的。只是不同的系統有不同的約定。
一個我看到的最常見的(數學)是:
quotient = floor(x/y)
remainder = x - quotient * y
哪裏floor()
是圓接近負無窮大。
這是你的計算器給你的約定。 (數學也採用了這種約定)
一個我想大多數編程語言的使用方法是:
quotient = integerpart(x/y)
remainder = x - quotient * y
哪裏integerpart()
是相同的(浮動 - > integer)強制轉換。 (向零舍入)
一些約定將其餘操作數保持爲相同的符號。
同樣的事情適用於分隔符的符號。不同的約定是不同的。
「怎麼了......?」
模運算有兩種常見的定義。 Java選擇了一個(「同一符號作爲分紅」),計算器實現了另一個;大概「和除數相同的符號」,儘管你需要做一些實驗才能確定。
實際上,modulo operation上的Wikipedia頁面給出了不同編程語言使用的運算符的4種不同定義。 (並且一些編程語言爲您提供了兩種不同語義的操作符。)
在C的情況下,定義取決於您所討論的C標準的版本。對於ISO C 1999,模運算符遵循與Java相同的定義。對於早期版本的C標準的%
語義是實現相關
「這兩者之間有區別嗎?」
顯然有!
「我需要一個像計算器一樣解決它的程序。」
隨意寫一個:-)。
但如果你只是想知道如何獲得「相同的符號除數」在Java中模的形式,這裏有一個方法:
int otherModulus = (a % b) + (a < 0 ? b : 0); // works for b > 0.
int otherModulus = (a % b) + // works for b != 0
(b > 0 ? (a < 0 ? b : 0) : (a > 0 ? -b : 0));
你確定你最後的配方?如果a和b是負數,它會給出一些低於b的值。 –
@PaŭloEbermann - 很好的捕獲。我現在知道了嗎? –
模運算負的操作數是不同的語言不同,取決於驅動的語言定義。在Java中,Modulus更像是剩餘部分。和
int r = x % n;
if (r > 0 && x < 0)
{
r -= n;
}
或者,如果你使用的是一個負輸入返回負數語言,你會:
一般來說,如果你想獲得的負輸入負數,那麼你可以使用這個喜歡正面:
int r = x % n;
if (r < 0)
{
r += n;
}
所以,根據你的需要爲所期望的結果,我推薦你使用相應的執行,而不是依靠語言來計算你。
此外,請注意,結果應該在Java的情況下在JLS: in the section 15.17.3 - 剩餘操作符%中進行了自動描述。他們在那裏給出了一個動機(a%b應該是這樣(a/b)* b +(a%b)等於a),但是在JLS中包含該部分使得結果如此。
- 1. 爲什麼這兩個程序會導致不同的結果?
- 2. 爲什麼Z3中的運算符'/'和'div'會給出不同的結果?
- 3. Perl:爲什麼for和foreach會給我不同的結果?
- 4. 爲什麼不同的名字給了我不同的結果?
- 5. 爲什麼MIPS在無符號數字上的操作會給符號結果?
- 6. PHP - 當我將它分配給一個變量時,爲什麼我的計算會產生不同的結果?
- 7. 爲什麼traceview會給出不一致的測量結果?
- 8. 在我率計算器,我的AJAX操作導致白屏
- 9. 計算給出不同的結果
- 10. 爲什麼Excel的平均值會給出不同的結果?
- 11. 爲什麼使用real的計算給出了使用int的不同結果?
- 12. 爲什麼java的給不同的DNS結果與IPv4Stack
- 13. 什麼會導致System.Move偶爾給出錯誤的結果?
- 14. 爲什麼minus操作符會給出與mysql中的TIMESTAMPDIFF()函數不同的結果?
- 15. 爲什麼ALSO使用會在R2和R3中導致不同的結果?
- 16. 爲什麼這些指針推理會導致不同的結果?
- 17. 爲什麼Postgres position()函數會給出不同的結果?
- 18. 爲什麼CodeIgniter Active Record和phpMyAdmin會給出不同的結果?
- 19. 爲什麼xgboost.cv和sklearn.cross_val_score會給出不同的結果?
- 20. 爲什麼Perl和/ bin/sha1會給出不同的結果?
- 21. 爲什麼re.findall()給我的結果不同於Python中的re.finditer()?
- 22. 計算MSE:爲什麼這兩種方式給出不同的結果?
- 23. 爲什麼這個模數運算符給我帶來麻煩?
- 24. 爲什麼linux排序不會給我想要的結果?
- 25. 爲什麼我的模操作會給我虛假的值?
- 26. 什麼會導致我的MySQL查詢掛兩個結果後?
- 27. Java新手:爲什麼不給我正確的結果?
- 28. javascript的前綴操作會如何導致這樣的結果?
- 29. 計算訂單不會給出結果
- 30. Java雙精度:不同的公式會導致不同的結果
你使用什麼計算器?在數學上,兩個答案都是正確的。另外,在C中,我相信答案在這裏沒有說明;它也可能是一個不同的值。 – templatetypedef
C99要求答案是-1。 – dan04