C++ Logo

sg12

Advanced search

Re: [ub] Signed shifting

From: Jean-Marc Bourguet <jm_at_[hidden]>
Date: Tue, 18 Nov 2014 08:44:22 +0100
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_[hidden]
>> <mailto:gdr_at_[hidden]>> 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

Received on 2014-11-18 08:51:39