PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
C_and_CPP
[問題] 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 要打出來
繼續閱讀
[問題] int跟char一起宣告的Bug?
allen20937
[問題] 請問初學C語言推薦書(文長
wiwi951236
Re: [問題] 請問C介面跟實作分開的作法
dzwei
[問題] 出現error看不懂意思
zxc4569393
[問題] 如何改進超時的問題
bhbbbbb
Re: [問題] 請問C介面跟實作分開的作法
alan23273850
Re: [問題] x+=x&-x 是什麼意思?
notBeing
[問題] x+=x&-x 是什麼意思?
zxcv14011
Fw: [問題] 請問C介面跟實作分開的作法
DIE755127
[討論] 用else if跟直接用if的差別
michael4210
Links
booklink
Contact Us: admin [ a t ] ucptt.com