c语言除法截断,为什么两个整数之间的除法结果会被截断?

小编典典

C#的历史可追溯到C,因此答案为“为什么C#会这样?” 是“为什么在C中这样子?”的组合 和“没有充分的理由进行更改吗?”

C的方法是在高级语言和低级操作之间建立相当紧密的对应关系。处理器通常实现整数除法,以返回 商和余数, 二者均与操作数相同。

(所以我的问题是,“为什么类C语言中的整数除法不返回 两个整数 ”,而不是“为什么不返回浮点值?”)

解决方案是为除法和余数提供单独的运算,每个运算返回一个整数。在C的上下文中,每个操作的结果都是整数也就不足为奇了。这通常比浮点运算 更准确

。考虑您对的评论中的示例7 / 3。此值不能用有限的二进制数 或有限的十进制数表示 。换句话说,在当今的计算机上, _ 除非*_使用整数, _ 否则_ 我们 _无法准确表示 !7 / 3*_该分数的最准确表示是“商2,余数1”。

因此,没有充分的理由进行更改吗?我什么也想不出来,我 能 想到一些 不 改变的充分理由。没有其他答案提到过Visual

Basic(至少在版本6中)具有两个用于对整数进行除法的运算符:/将整数转换为double,然后返回double,同时\执行普通的整数运算。

\在努力使用浮点除法实现二进制搜索算法后,我了解了运算符。这真的很痛苦,整数除法就像是呼吸新鲜空气。没有它,在程序的初稿中将涉及很多特殊处理,以涵盖边缘情况和一个错误。

从这些经验中,我得出的结论是,使用不同的运算符来划分整数会造成混淆。

另一种选择是仅执行一个整数运算,该整数运算始终返回双精度数,并要求程序员截断它。这意味着每次要进行整数除法时,都必须执行两次int->

double转换,即截断和double->

int转换。还有多少程序员会错误地舍入或舍入结果而不是舍弃结果呢?这是一个更复杂的系统,至少容易出现程序员错误,而且速度较慢。

最后,除二进制搜索外,还有许多采用整数算术的标准算法。一个示例是将对象的集合划分为相似大小的子集合。另一种方法是在1维数组中的索引与2维矩阵中的坐标之间进行转换。

据我所知,就语言可用性而言,没有任何替代“ int / int yields int”的方法能幸免于成本效益分析,因此没有理由改变从C继承的行为。

结论:

在许多标准算法中,整数除法通常很有用。

当需要整数浮点除法,可以明确地用一个简单的,短的,并明确援引投:(double)a / b而不是a / b

其他选择会给程序员带来更多的复杂性,并给处理器带来更多的时钟周期。

2020-07-28

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值