[ub] Signed shifting

Jean-Marc Bourguet jm at bourguet.org
Tue Nov 18 08:44:22 CET 2014


On 17.11.2014 22:31, Jens Maurer wrote:
> On 11/17/2014 10:03 PM, John Spicer wrote:
>> 
>> On Nov 17, 2014, at 3:57 PM, Gabriel Dos Reis <gdr at microsoft.com 
>> <mailto:gdr at microsoft.com>> wrote:
>> 
>>> Agreed, and that is the easier part :-)
>>> 
>>> I’m trying to find a middle-ground for people to get certainty (the 
>>> implementation will tell you programmatically what the encoding is), 
>>> while removing or reducing the surface area of undefined behavior.  
>>> My suspicion is that we will end up with 2’s complement for most 
>>> cases.  But that is not based on a scientific study.
> 
>> We could define shifting of signed values to work as-if on a 
>> twos-complement system.
> 
> There are related core issues 1857, 1861, 1943.
> 
> In order to resolve some of these, I'm on the verge of specifying that
> shifts do multiplication / division by  2^N.
> 
> Assuming we make shifts for signed numbers well-defined, is the 2^N
> approach any different from specifying as-if two's complement?

You need to use a rounding toward minus infinity division,
not the rounding toward zero which is used for operator/
(at least for C, I don't remember if we carried on the change of
C99 in C++).

Yours,

-- 
Jean-Marc


More information about the ub mailing list