Frage zum gcc source code

23/04/2008 - 17:52 von Oliver Bendix | Report spam
Hallo,

ich habe eine Frage bezueglich eines Codeschnipsels aus
http://gcc.gnu.org/viewcvs/branches...gcc/real.c

/* Write into BUF the maximum representable finite floating-point
number, (1 - b**-p) * b**emax for a given FP format FMT as a hex
float string. LEN is the size of BUF, and the buffer must be large
enough to contain the resulting string. */

void
get_max_float (const struct real_format *fmt, char *buf, size_t len)
{
int i, n;
char *p;

strcpy (buf, "0x0.");
n = fmt->p;
for (i = 0, p = buf + 4; i + 3 < n; i += 4)
*p++ = 'f';
if (i < n)
*p++ = "08ce"[n - i];
sprintf (p, "p%d", fmt->emax);
if (fmt->pnan < fmt->p)
{
/* This is an IBM extended double format made up of two IEEE
doubles. The value of the long double is the sum of the
values of the two parts. The most significant part is
required to be the value of the long double rounded to the
nearest double. Rounding means we need a slightly smaller
value for LDBL_MAX. */
buf[4 + fmt->pnan / 4] = "7bde"[fmt->pnan % 4];
}

gcc_assert (strlen (buf) < len);
}

Ich verstehe die rechte Seite der Zuweisung

*p++ = "08ce"[n - i];

nicht. Kann mir bitte jemand sagen, was hier passieren soll?

Gruss,
Oliver
 

Lesen sie die antworten

#1 Claudio Carobolante
23/04/2008 - 18:01 | Warnen spam
Oliver Bendix wrote:

Ich verstehe die rechte Seite der Zuweisung

*p++ = "08ce"[n - i];

nicht. Kann mir bitte jemand sagen, was hier passieren soll?



Der Ausdruck n-i wird Werte zwischen einschließlich 0 und 3 liefern. Bei dem
Wert 0 wird der Ausdruck "08ce"[n-i] das Zeichen '0', bei dem Wert 1 das
Zeichen '8', bei 2 den Wert 'c' und schließlich bei 3 das Zeichen 'e'
liefern.

cc

Ähnliche fragen