[問題] c/c++的整數除法和取餘數運算

作者: xavier13540 (柊 四千)   2018-05-02 01:20:44
c和c++的/和% 並不是常見的除法定義
例如下面這兩行
printf("5/3 = %d...%d\n", 5/3, 5%3);
printf("(-5)/3 = %d...%d\n", (-5)/3, (-5)%3);
會跑出
5/3 = 1...2
(-5)/3 = -1...-2
我實在是想不到在什麼情況下 需要讓我的餘數是負的
// 反觀python的//和% 定義就和數學上常用的定義一樣
請問當初究竟為什麼要把/和%定義成這樣?
我試著google過了 沒找到答案orz
作者: alan23273850   2018-05-02 02:46:00
https://goo.gl/Ng8XwH 怎麼會沒答案
作者: LPH66 (-6.2598534e+18f)   2018-05-02 02:47:00
其實就是除法的商要 trunc() 還是 floor() 的差別C/C++ (在 C99/C++11 之後) 取 trunc(), Python 取 floor()
作者: alan23273850   2018-05-02 02:48:00
stackoverflow 裡面主要的理由是處理器實作方便你遇到負號,是用正除法再取負號比較方便,還是按照數學上的定義再進位一次變成正數比較方便呢?
作者: LPH66 (-6.2598534e+18f)   2018-05-02 02:50:00
而且會取 trunc() 其實也是因為處理器實作多這樣做的關係在 C99/C++11 之前 C/C++ 是不規定你要怎麼取的就是處理器怎麼做我們就怎麼做的意思話說回來我看起來 python 好像是反過來定, 先定餘數恆非負然後據此定義整數除法; C/C++ 則是先定整數除法如何處理再據此定義餘數, 所以方向上就會不一樣
作者: MOONRAKER (㊣牛鶴鰻毛人)   2018-05-02 14:58:00
不是規定吧 是隨便processor怎麼做
作者: ThomasHuang (命賤如草)   2018-05-02 18:28:00
有什麼好失望的,如果連這麼簡單的語言特性都沒有辦法掌握,不符合傳統數學的東西就覺得不合理,那可能還是不要寫C比較好
作者: alan23273850   2018-05-02 23:27:00
我的關鍵字: why cpp division negative remainderremainder 要打出來

Links booklink

Contact Us: admin [ a t ] ucptt.com