3 回答

TA貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個(gè)贊
在x86(和其他處理器體系結(jié)構(gòu))上,整數(shù)除法和模是通過(guò)單個(gè)操作idiv
(div
對(duì)于無(wú)符號(hào)值)執(zhí)行的,該操作會(huì)產(chǎn)生商和余數(shù)(分別針對(duì)in AX
和in的字長(zhǎng)參數(shù)DX
)。C庫(kù)函數(shù)中使用了該函數(shù)divmod
,編譯器可以將其優(yōu)化為單個(gè)指令!
整數(shù)除法遵守兩個(gè)規(guī)則:
非整數(shù)商將舍入為零;和
dividend = quotient*divisor + remainder
結(jié)果滿足了方程式。
因此,當(dāng)將負(fù)數(shù)除以正數(shù)時(shí),商將為負(fù)(或零)。
因此,這種行為可以看作是一系列本地決策的結(jié)果:
處理器指令集設(shè)計(jì)針對(duì)較普通情況(模)優(yōu)化了普通情況(除法);
一致性(四舍五入并遵守除法方程)比數(shù)學(xué)正確性更可??;
C更喜歡效率并且要簡(jiǎn)單(特別是傾向于將C視為“高級(jí)匯編程序”);和
C ++更喜歡與C兼容。

TA貢獻(xiàn)1911條經(jīng)驗(yàn) 獲得超7個(gè)贊
此規(guī)范的參數(shù)是什么?
C ++的設(shè)計(jì)目標(biāo)之一是有效地映射到硬件。如果底層硬件以產(chǎn)生負(fù)余數(shù)的方式實(shí)現(xiàn)除法,那么這就是%在C ++中使用時(shí)得到的結(jié)果。真的就是全部。
制定這樣的標(biāo)準(zhǔn)的人是否有討論的地方?
您將在comp.lang.c ++。moderated上找到有趣的討論,并在較小程度上找到comp.lang.c ++
- 3 回答
- 0 關(guān)注
- 750 瀏覽
添加回答
舉報(bào)