[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: