是DIV功能很有用(stdlib.h中)? [英] Is div function useful (stdlib.h)?

查看:114
本文介绍了是DIV功能很有用(stdlib.h中)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有是在C函数调用DIV,C ++(stdlib.h中)

There is a function called div in C,C++ (stdlib.h)

div_t div(int numer, int denom);

typedef struct _div_t
{
  int quot;
  int rem;
} div_t;

不过,C,C ++有/和%的运营商。

But C,C++ have / and % operators.

我的问题是:当有/和%的运营商,是DIV功能非常有用

推荐答案

在div()函数返回一个包含由第二(分母)的第一个参数(分子)的除法的商和余数的结构。有四种形式:

The div() function returns a structure which contains the quotient and remainder of the division of the first parameter (the numerator) by the second (the denominator). There are four variants:


  1. div_t格(INT,INT)

  2. ldiv_t LDIV(很久很久)

  3. lldiv_t lldiv(很长很长,很长很长)

  4. imaxdiv_t imaxdiv(还会将intmax_t,还会将intmax_t (重新将intmax_t presents提供最大的整数类型的系统上)

  1. div_t div(int, int)
  2. ldiv_t ldiv(long, long)
  3. lldiv_t lldiv(long long, long long)
  4. imaxdiv_t imaxdiv(intmax_t, intmax_t (intmax_t represents the biggest integer type available on the system)

div_t 结构是这样的:

typedef struct
  {
    int quot;           /* Quotient.  */
    int rem;            /* Remainder.  */
  } div_t;

的实施不只是使用 / 运营商,所以它不完全是一个很复杂的或必要的功能,但它是C标准的一部分(如定义[ISO 9899:201X] [1])。

The implementation does simply use the / and % operators, so it's not exactly a very complicated or necessary function, but it is part of the C standard (as defined by [ISO 9899:201x][1]).

查看实施GNU库:

/* Return the `div_t' representation of NUMER over DENOM.  */
div_t
div (numer, denom)
     int numer, denom;
{
  div_t result;

  result.quot = numer / denom;
  result.rem = numer % denom;

  /* The ANSI standard says that |QUOT| <= |NUMER / DENOM|, where
     NUMER / DENOM is to be computed in infinite precision.  In
     other words, we should always truncate the quotient towards
     zero, never -infinity.  Machine division and remainer may
     work either way when one or both of NUMER or DENOM is
     negative.  If only one is negative and QUOT has been
     truncated towards -infinity, REM will have the same sign as
     DENOM and the opposite sign of NUMER; if both are negative
     and QUOT has been truncated towards -infinity, REM will be
     positive (will have the opposite sign of NUMER).  These are
     considered `wrong'.  If both are NUM and DENOM are positive,
     RESULT will always be positive.  This all boils down to: if
     NUMER >= 0, but REM < 0, we got the wrong answer.  In that
     case, to get the right answer, add 1 to QUOT and subtract
     DENOM from REM.  */

  if (numer >= 0 && result.rem < 0)
    {
      ++result.quot;
      result.rem -= denom;
    }

  return result;
}

这篇关于是DIV功能很有用(stdlib.h中)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆