首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >div()库函数的用途是什么?

div()库函数的用途是什么?
EN

Stack Overflow用户
提问于 2012-07-31 00:43:59
回答 5查看 4.7K关注 0票数 7

当C使用/运算符将两个数相除时,使用div() library function的目的是什么?

是否存在不能使用/而可以使用div()的情况?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-07-31 00:51:43

来自C99基本原理文档:

(7.20.6.2 div、ldiv和lldiv函数)因为C89在涉及负操作数时具有用于有符号整数除法的实现定义语义,所以发明了C99中的div和ldiv以及lldiv,以便为有符号整数除法和余数运算提供明确指定的语义。采用了与Fortran相同的语义。由于这些函数同时返回商和余数,因此它们还可以作为一种方便的方法,有效地对底层硬件进行建模,将这两个结果作为同一操作的一部分进行计算。..。既然C99要求除法运算符具有类似的语义,那么新程序使用div、ldiv或lldiv的主要原因是为了同时获得商和余数。

票数 17
EN

Stack Overflow用户

发布于 2018-11-10 11:09:01

引用自C Programming: A Modern Approach, 2nd Edition,26章,问答部分。

问:为什么会存在div和ldiv函数?我们不能只使用/和%运算符吗?

答:divldiv/%不太一样。回想一下4.1节,将/%应用于负操作数不会在C89中给出可移植的结果。如果ij为负,则i / j的值是向上还是向下舍入是实现定义的,也是i % j的符号。由divldiv计算的答案,另一方面,不依赖于实现。商被舍入到零;余数根据公式n = q x d + r计算,其中n是原始数,q是商,d是除数,r是余数。这里有几个例子:

N|d|q|r-|-| -7 |3|2|1 -7 |3| -2 | -1 7| -3 | -2 |1-7| -3 | -1

在C99中,/%运算符是保证的,以产生与divldiv相同的结果。

效率是divldiv存在的另一个原因。许多机器都有一个既可以计算商又可以计算余数的指令,因此调用divldiv可能比单独使用/%运算符更快。

票数 3
EN

Stack Overflow用户

发布于 2012-07-31 00:45:43

div_t是一个结构,它包含一个商成员和一个余数成员。例如:

代码语言:javascript
复制
typedef struct {
    int quot;
    int rem;
} div_t;

div函数的一些简单实现使用/%运算符。您还可以查看this topic

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11725884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档