Re: Please don't do this (code fragment)
We aren't writing about unsigned arithmetic.
On Tue, Jan 15, 2002 at 04:36:15PM -0600, Manoj Srivastava wrote:
> >>"Olaf" == Olaf Weber <olaf@infovore.xs4all.nl> writes:
>
> Olaf> Thomas Bushnell writes:
> >> Actually, the C standard does essentially guarantee two's complement
> >> arithmetic. It specifies integer overflow behavior and
> >> signed/unsigned conversion behavior exactly.
>
> Olaf> It does for unsigned integers, but for signed integers overflow is
> Olaf> undefined behaviour.
>
> Umm. Please note from
> ======================================================================
> 3.1.2.4 Types
>
> ... A computation involving unsigned operands can never overflow,
> because a result that cannot be represented by the resulting
> unsigned integer type is reduced modulo the number that is one
> greater than the largest value that can be represented by the
> resulting unsigned integer type.
> ======================================================================
>
> Also:
> ======================================================================
> 3.2.1.2 Signed and Unsigned Integers
>
> When a value with integral type is converted to another integral
> type, if the value can be represented by the new type, its value is
> unchanged.
>
> When a signed integer is converted to an unsigned integer with equal
> or greater size, if the value of the signed integer us nonnegative
> its value is unchanged, Otherwise if the unsigned integer has
> greater size the signed integer is first promoted to the signed
> integer corresponding to the unsigned integer; the value is
> converted to unsigned by adding to it one greater than the largest
> number that can be represented in the unsigned integer type.
>
> When a value with integral type is demoted to an unsigned
> integer with smaller size the result is the nonnegative remainder on
> division by the number one greater than the largest unsigned number
> that can be represented in the type with smaller size.. When a value
> with integral type is demoted to a signed integer with smaller size,
> or an unsigned integer us converted to its corresponding sign4ed
> integer, if the value cannot be represented the result is
> implementation-defined.
> ======================================================================
>
>
> Clear? ;-)
>
> Olaf> The clearest statement of that is 3.4.3, albeit
> Olaf> in an example:
>
> Olaf> 3.4.3
> Olaf> 1 undefined behavior behavior, upon use of a nonportable or erroneous
> Olaf> program construct or of erroneous data, for which this International
> Olaf> Standard imposes no requirements
> Olaf> 2 NOTE Possible undefined behavior ranges from ignoring the situation
> Olaf> completely with unpredictable results, to behaving during translation
> Olaf> or program execution in a documented manner characteristic of the
> Olaf> environment (with or without the issuance of a diagnostic message),
> Olaf> to terminating a translation or execution (with the issuance of a
> Olaf> diagnostic message).
> Olaf> 3 EXAMPLE An example of undefined behavior is the behavior on integer
> Olaf> overflow.
>
> manoj
> --
> Somebody's terminal is dropping bits. I found a pile of them over in
> the corner.
> Manoj Srivastava <srivasta@debian.org> <http://www.debian.org/%7Esrivasta/>
> 1024R/C7261095 print CB D9 F4 12 68 07 E4 05 CC 2D 27 12 1D F5 E8 6E
> 1024D/BF24424C print 4966 F272 D093 B493 410B 924B 21BA DABB BF24 424C
>
>
> --
> To UNSUBSCRIBE, email to debian-devel-request@lists.debian.org
> with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
Reply to: