C_and_CPP 板


LINE

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 -- 小妹妹:「大哥哥~你说的魔法棒在哪里呀~??」 大哥哥:「在这里啊~!(掏出魔法棒)你看你看,牠会自己长大喔~」 小妹妹:「哇!!真的耶!用这个就可以长大吗~?怎麽用啊~?」 大哥哥:「来!手给我,对对,就是摆在那里,轻轻的上下移动...对对!就是这样!」 小妹妹:「这样吗@.@?上下移动?好好玩喔~哈哈~又变大了耶~」 大哥哥:「对对!喔..喔..对了!等等会有魔法药剂跑出来,要喝掉它才有效果喔~」 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.112.229.87
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1525195247.A.308.html
1F:推 alan23273850: https://goo.gl/Ng8XwH 怎麽会没答案 05/02 02:46
之前打英文关键字 也没找到这篇orz 有看到其他人问 但回答都答非所问 例如叫大家小心c/c++的%不是数学上的余数定义之类的
2F:推 LPH66: 其实就是除法的商要 trunc() 还是 floor() 的差别 05/02 02:47
3F:→ LPH66: C/C++ (在 C99/C++11 之後) 取 trunc(), Python 取 floor() 05/02 02:47
我想知道的是为什麽要取trunc() 因为取trunc() 对程式语言的使用者来说 一点好处也没有 就像我也可以引入一种新的取余运算 定义除以某个正整数m的时候 余数在m+7122到2m+7121之间 可是这种运算就是增加使用者的麻烦而已
4F:→ alan23273850: stackoverflow 里面主要的理由是处理器实作方便 05/02 02:48
5F:→ alan23273850: 你遇到负号,是用正除法再取负号比较方便,还是按照 05/02 02:48
6F:→ alan23273850: 数学上的定义再进位一次变成正数比较方便呢? 05/02 02:49
7F:推 LPH66: 而且会取 trunc() 其实也是因为处理器实作多这样做的关系 05/02 02:50
8F:→ LPH66: 在 C99/C++11 之前 C/C++ 是不规定你要怎麽取的 05/02 02:50
9F:→ LPH66: 就是处理器怎麽做我们就怎麽做的意思 05/02 02:51
10F:→ LPH66: 话说回来我看起来 python 好像是反过来定, 先定余数恒非负 05/02 02:53
11F:→ LPH66: 然後据此定义整数除法; C/C++ 则是先定整数除法如何处理 05/02 02:54
12F:→ LPH66: 再据此定义余数, 所以方向上就会不一样 05/02 02:54
所以结论是 为了加速/和%的计算速度 c/c++只好规定 一个负整数除以正整数m 对商取trunc()而让余数介於-m+1到0之间? 听起来不是没有道理 但是我好失望QAQ ※ 编辑: xavier13540 (140.112.229.87), 05/02/2018 07:52:45
13F:→ MOONRAKER: 不是规定吧 是随便processor怎麽做 05/02 14:58
14F:→ ThomasHuang: 有什麽好失望的,如果连这麽简单的语言特性都没有办 05/02 18:28
15F:→ ThomasHuang: 法掌握,不符合传统数学的东西就觉得不合理,那可能 05/02 18:28
16F:→ ThomasHuang: 还是不要写C比较好 05/02 18:28
17F:推 alan23273850: 我的关键字: why cpp division negative remainder 05/02 23:27
18F:→ alan23273850: remainder 要打出来 05/02 23:27







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Tech_Job站内搜寻

TOP