回答
從C99理由文件:
(7.20.6.2的DIV,LDIV和lldiv功能)因爲C89已經有符號整數的除法實現定義語義時負的操作數參與,股利和LDIV ,和C99中的lldiv,是爲了給有符號整數除法和餘數運算提供精心指定的語義。語義採用與Fortran相同。由於這些函數同時返回商和餘數,因此它們也可以作爲高效建模底層硬件的便捷方式,從而將兩個結果作爲同一操作的一部分進行計算。 [...] 既然C99需要類似的除法運算符的語義,新的 程序使用div,ldiv或lldiv的主要原因是要同時獲得商和餘數。
我沒有意識到這一點。太糟糕了,他們沒有提供另外一個用於「餘數」> = 0的更有用的行爲。根據我的經驗,當你真正在意n/d是如何被舍入爲n時,在幾乎所有這些情況下,你都希望它朝向-inf(這也使得%成爲一個適當的模數)。呃,好吧。 – greggo 2015-06-16 17:05:28
div_t
是一個結構,它包含商成員和餘數成員。例如:
typedef struct {
int quot;
int rem;
} div_t;
的div
功能使用/
和%
運營商的一些簡單的實施方式。您還可以看到this topic。
div()
返回分區和remainder
的result
。因此,您不必使用%
運算符來查找remainder
。
正如其他人所提到的,div()
會給你 商和餘數。這是因爲大多數C運行時使用的(軟件)整數 除法算法在相同的 時間計算兩者。
如果目標計算機沒有硬件除法器,該/
操作通常被變成了一個電話div()
和 其餘被扔掉。 %
運算符也會發生同樣的情況,只不過它是被投擲的商。所以,如果你 做這樣的事情:
quot = a/b;
rem = a % b;
你兩次調用除法例程(和除法是相當緩慢的,如果 您的電腦沒有硬件做)。所以使用 div()
可以更快地獲得兩者。
(當然,它也是不易閱讀,你是否真正獲得任何 性能優勢取決於你的特定平臺和編譯器。 你應該永遠只能切換到div()
如果你確定這是 性能瓶頸。記住Knuth關於過早的 優化。)
- 1. 函數try塊的用途是什麼?
- 2. knockout.js庫中的exportProperty函數的用途是什麼?
- 3. 不同庫的用途是什麼?
- 4. 函數中覆蓋的JavaScript參數的用途是什麼?
- 5. setYLabelsColor()等函數中scale參數的用途是什麼?
- 6. jQuery.ajax()函數中數據選項的用途是什麼?
- 7. url()函數中kwargs參數的用途是什麼?
- 8. `$ .support.ownLast`的用途是什麼?
- 9. TPopupActionBar的用途是什麼?
- 10. _GLOBAL__I_的用途是什麼?
- 11. $ _POST的用途是什麼?
- 12. 「$ this」的用途是什麼?
- 13. CreateSilverlight.js的用途是什麼?
- 14. vertexAttribPointer的用途是什麼?
- 15. RecognizerIntent.DETAILS_META_DATA的用途是什麼?
- 16. Rake的用途是什麼?
- 17. javax.security.auth.callback。*的用途是什麼?
- 18. config.assets.precompile的用途是什麼?
- 19. is_uploaded_file()的用途是什麼?
- 20. archetypeArtifactId的用途是什麼?
- 21. System.Data.SqlClient.SqlParameter.IsNullable的用途是什麼?
- 22. com.sun.org.apache.xpath.internal.operations.String的用途是什麼?
- 23. FXCollections.unmodifiableObservableList的用途是什麼?
- 24. __init__的用途是什麼?
- 25. __cxa_pure_virtual的用途是什麼?
- 26. cURL的用途是什麼?
- 27. RhoMobile的用途是什麼?
- 28. curdoc()的用途是什麼?
- 29. configSections的用途是什麼?
- 30. RegisterGlobalFilters的用途是什麼?
http://stackoverflow.com/questions/11694546/divide-a-number-by-3-without-using-operators – 2012-07-30 16:46:36
@StephenCanon你的意思是div()已經被用來處理這些問題嗎? – Eight 2012-07-30 16:50:02
不,'div()'提出了荒謬的面試問題。這是一個笑話。這就是說,這將是這個問題的一個很好的答案。 – 2012-07-30 16:50:42