回答
結果總是會是師的底線?什麼是定義的行爲?
是,兩個操作數的整數商。
6.5.5乘法運算符
當整數分割,/運算的結果是代數商與丟棄任何 小數部分。 88)如果商a/b可表示,則表達式 (a/b)* b + a%b應等於a。
和相應的腳註:
88)這通常被稱爲「'截斷向零」。
當然兩點要注意的是:
通常的算術轉換都對操作數執行。
和:
/運算的結果是由第二所述 第一個操作數的除法的商 ; %運算符的 結果是餘下的 。 在這兩種操作中,如果第二個操作數的值爲 爲零,則該行爲未定義。
[注:重點煤礦]
...除非你將一個負數除以正值(或v.v.),在這種情況下,它將成爲最大值。 – 2010-08-30 17:45:19
既不是地板也不是天花板,它是小數部分的截斷,它在概念上是不同的! – Wizard79 2010-08-30 17:48:33
@將A:不是。它被定義爲朝零截斷。調用其他任何東西只會增加混淆,所以請不要這樣做。 – 2010-08-30 17:49:10
如果結果爲負,C向0截斷,而不是地板 - 我瞭解到這個閱讀爲什麼Python的整數除法總是樓層位置:Why Python's Integer Division Floors
我同意評論是否有(neg%pos)消極有用嗎?在相關說明中,我想知道在「unsignedvar> signedvar」的某些情況下所需的算術錯誤行爲是否有用?我能理解不需要永遠正確行爲的理由;我沒有看到要求錯誤行爲的理由。 – supercat 2010-08-30 18:34:33
+1爲什麼地板是整數除法的正確行爲的一個很好的參考(與C的定義相反,它被打破並且幾乎沒有用)。 – 2010-08-30 19:19:28
正確和準確。 +1。 – 2015-02-06 09:04:34
Dirkgently在C99中給出了整數除法的an excellent description,但是您還應該知道,在C89整數除法中,負操作數具有實現定義的方向。
從ANSI C草案(3.3.5):
如果操作數是負的,/操作的結果是否大於代數商或最小整數比小於的最大整數更大的代數商是實現定義的,這是%運算符結果的符號。如果商a/b可表示,則表達式(a/b)* b + a%b應等於a。
因此,當您使用C89編譯器時,請注意負數。
C99選擇向零截斷是一個有趣的事實,因爲這是FORTRAN如何做到的。請參閱comp.std.c上的this message。
和C99草案N1256前言第5段提到'可靠的整數除法'作爲一種新的語言特徵。令人驚歎的'* - *'。 – 2016-09-11 08:24:51
截斷是最常見的CPU硬件(例如x86)的行爲,所以做出不同的選擇會是瘋狂的。 IDK首先是Fortran語義或硬件行爲,但這些並不是巧合。 – 2017-11-07 04:23:35
結果會一直是師的底線嗎?
不會,結果會有所不同,但變化只發生在負值上。
什麼是定義的行爲?
要清楚地板輪朝負無窮大,而整數除法舍入到零(截斷)
對於正值它們是相同的
int integerDivisionResultPositive= 125/100;//= 1
double flooringResultPositive= floor(125.0/100.0);//=1.0
對於負值,這是不同
int integerDivisionResultNegative= -125/100;//=-1
double flooringResultNegative= floor(-125.0/100.0);//=-2.0
- 1. 什麼是正整數分解爲整數的正確方法?
- 2. 做整數除法的最快方法是什麼?
- 3. 爲什麼這個整數除法產量爲0?
- 4. 爲什麼Python 2只用'/'作爲整數除法?
- 5. 爲什麼整數除法和模數不NVRTC
- 6. 爲什麼整數除法返回浮點數?
- 7. 爲什麼整數除法碼給出了錯誤的答案?
- 8. Excel VBA爲什麼舍入我的整數除法結果?
- 9. 爲什麼Java中的兩個整數除法返回0.0?
- 10. 爲什麼整數除法只截取python中的正分子?
- 11. 爲什麼我的整數總是零?
- 12. 爲什麼to_java方法將Java中的整數(會是什麼)轉換爲Long?
- 13. 爲什麼在這裏不會發生整數除法截斷?
- 14. 使用FragmentStatePagerAdapter時無法刪除頁面 - 使用整數主鍵時,行ID的常見行爲是什麼?
- 15. 下面這行Ruby是做什麼的? 「整數>>整數」
- 16. 爲什麼不是PDO_MySQL返回整數?
- 17. 是什麼使簽名整數的行爲有所不同?
- 18. 爲什麼Java中的短整數除法的結果類型不是一個短整數?
- 19. 爲什麼兩個正整數的乘積是負整數?
- 20. 爲什麼下面的代碼是行不通的,除非數組是整數[],不是int []
- 21. 整數除法總是零
- 22. 什麼是從整數值
- 23. 什麼是整數Java中
- 24. 什麼是定點整數?
- 25. 這個語法是什麼意思將argb轉換爲整數?
- 26. 爲什麼使用整數而不是長整數?
- 27. 爲什麼整數常量池的行爲改變爲127?
- 28. 什麼是strstr的NULL參數行爲?
- 29. 刪除和刪除[]的確切行爲是什麼?
- 30. __faststorefence的行爲是什麼?
摘要:*** signed *整數除法截斷爲零**。對於非負面結果,這與樓層相同(朝向-Infinity)。 (請注意,C89不保證這一點,請參閱答案。) – 2017-11-07 04:19:44